From 5c01a99a832fa2b1258aa80ec3595a20636e3fa4 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 28 Oct 2026 02:02:49 +0000 Subject: [PATCH 01/16] Add an import-time consistency check tools/import_check.py checks what an importer needs beyond validate.sh: declared verbs and targets for every ogit:allowed and ogit:from-to edge, one verb declaration shape, file names, duplicate declarations, and undeclared prefixes. It can write the verb catalogue and the allowed-edge table. It is not wired into validate.sh or CI. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMPWTwovjYJEUMuGPb4 --- tools/README.md | 39 +++ tools/import_check.py | 506 +++++++++++++++++++++++++++++++++++++ tools/test_import_check.py | 107 ++++++++ 3 files changed, 652 insertions(+) create mode 100644 tools/README.md create mode 100644 tools/import_check.py create mode 100644 tools/test_import_check.py diff --git a/tools/README.md b/tools/README.md new file mode 100644 index 0000000000..2bd4d7b3b3 --- /dev/null +++ b/tools/README.md @@ -0,0 +1,39 @@ +# tools + +## `import_check.py` — strict consistency check for importers + +`validate.sh` runs the OGIT validator, which checks what this repository +requires of its own files. `import_check.py` checks what a program that +imports OGIT into another schema needs on top of that, and can write the verb +catalogue and the allowed-edge table that such an import reads. + +It is not wired into `validate.sh` or CI and changes no file. It needs only +Python 3.8+ and no packages. + +```sh +python3 -I tools/import_check.py +python3 -I tools/import_check.py --emit-verbs verbs.tsv --emit-allowed allowed.tsv +python3 -I tools/import_check.py --exclude NTO/PTF --warn C03 +python3 -I tools/test_import_check.py +``` + +| code | finding | +|---|---| +| C01 | a prefixed name uses a prefix the file does not declare | +| C02 | a verb is not `owl:ObjectProperty` + `rdfs:subPropertyOf ogit:Verb` | +| C03 | the file name differs from the local name of the term it declares | +| C04 | an `ogit:allowed` or `ogit:from-to` verb is not declared | +| C05 | an allowed or from-to source/target is not a declared entity | +| C06 | an allowed cell is not one `[ verb target ]` pair | +| C07 | a term is declared in more than one file | +| C08 | a class does not reach `ogit:Entity`, `ogit:Verb` or another OGIT base class | + +Exit status is 0 with no errors, 1 with errors, 2 when a file cannot be +parsed. `--warn CODE` reports a check without failing; `--exclude PATH` +skips a directory. + +`--emit-verbs` writes `verb, file, shape, uses`, where shape is +`object-property`, `property`, `class` or `undeclared`. `--emit-allowed` +writes `source, verb, target, file, origin`, where origin is `allowed` +(an entity's `ogit:allowed` list) or `from-to` (a verb's `ogit:from-to` +list). diff --git a/tools/import_check.py b/tools/import_check.py new file mode 100644 index 0000000000..47244bfe36 --- /dev/null +++ b/tools/import_check.py @@ -0,0 +1,506 @@ +#!/usr/bin/env python3 +"""Strict OGIT consistency check for importers. + +`validate.sh` runs the OGIT validator, which checks what the OGIT project +requires of its own files. A program that imports OGIT into another schema +needs more: every verb an entity allows must be declared, every allowed +target must be an entity, and every verb must have the one declaration shape +an importer can read. This script checks those import-time rules and can +write the verb catalogue and the allowed (source, verb, target) table. + +It is not part of `validate.sh` or CI, and it changes no file. Run it before +an import: + + python3 -I tools/import_check.py + python3 -I tools/import_check.py --emit-verbs verbs.tsv --emit-allowed allowed.tsv + +Exit status: 0 no errors, 1 errors found, 2 a file could not be parsed or +the arguments were wrong. `--warn CODE` reports a check without failing. + +Checks: + C01 a prefixed name uses a prefix the file does not declare + C02 a verb is not `owl:ObjectProperty` + `rdfs:subPropertyOf ogit:Verb` + C03 the file name differs from the local name of the term it declares + C04 an `ogit:allowed` or `ogit:from-to` verb is not declared anywhere + C05 an `ogit:allowed` or `ogit:from-to` target is not a declared entity + C06 an `ogit:allowed` cell is not `[ verb target ]` with one pair + C07 a term is declared in more than one file + C08 a class is not a subclass, directly or through declared classes, + of `ogit:Entity`, `ogit:Verb` or another OGIT base class + +Only the Turtle used in this repository is parsed: `@prefix`, prefixed +names, ``, string literals (including triple-quoted ones and language +tags), lists, blank nodes, `a`, and the `;` `,` `.` separators. +""" + +import argparse +import os +import re +import sys +from collections import defaultdict + +OGIT = "http://www.purl.org/ogit/" +RDF_TYPE = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" +RDFS = "http://www.w3.org/2000/01/rdf-schema#" +OWL = "http://www.w3.org/2002/07/owl#" + +RDFS_CLASS = RDFS + "Class" +SUBCLASS = RDFS + "subClassOf" +SUBPROP = RDFS + "subPropertyOf" +OBJECT_PROPERTY = OWL + "ObjectProperty" +ENTITY = OGIT + "Entity" +VERB = OGIT + "Verb" +ALLOWED = OGIT + "allowed" +FROM_TO = OGIT + "from-to" +FROM = OGIT + "from" +TO = OGIT + "to" + +ALL_CODES = ["C01", "C02", "C03", "C04", "C05", "C06", "C07", "C08"] + +SEPARATORS = set("()[];,") + + +class ParseError(Exception): + pass + + +# -------------------------------------------------------------------------- +# Tokenizer +# -------------------------------------------------------------------------- + +def tokenize(text): + """Yield (kind, value, line) for the Turtle subset described above.""" + i, n, line = 0, len(text), 1 + while i < n: + c = text[i] + if c == "\n": + line += 1 + i += 1 + elif c in " \t\r": + i += 1 + elif c == "#": + j = text.find("\n", i) + i = n if j < 0 else j + elif c == "<": + j = text.find(">", i) + if j < 0: + raise ParseError(f"line {line}: unterminated IRI") + yield ("iri", text[i + 1:j], line) + i = j + 1 + elif c in "\"'": + q3 = text[i:i + 3] + if q3 in ('"""', "'''"): + j = i + 3 + while j < n and text[j:j + 3] != q3: + j += 2 if text[j] == "\\" else 1 + if j >= n: + raise ParseError(f"line {line}: unterminated long string") + value = text[i + 3:j] + start_line = line + line += value.count("\n") + i = j + 3 + else: + j = i + 1 + while j < n and text[j] != c: + if text[j] == "\\": + j += 1 + if j < n and text[j] == "\n": + raise ParseError(f"line {line}: newline in string") + j += 1 + if j >= n: + raise ParseError(f"line {line}: unterminated string") + value = text[i + 1:j] + start_line = line + i = j + 1 + if i < n and text[i] == "@": + m = re.compile(r"@[A-Za-z]+(-[A-Za-z0-9]+)*").match(text, i) + if m: + i = m.end() + yield ("lit", value, start_line) + elif c in SEPARATORS: + yield (c, c, line) + i += 1 + elif c == ".": + yield (".", ".", line) + i += 1 + else: + m = re.compile(r"[^\s()\[\];,\"'<#]+").match(text, i) + word = m.group(0) + i = m.end() + # A local name cannot end with '.', so a trailing dot closes + # the statement ("ogit:Node." is "ogit:Node" then "."). + tail = 0 + while word.endswith(".") and len(word) > 1: + word = word[:-1] + tail += 1 + yield ("word", word, line) + for _ in range(tail): + yield (".", ".", line) + + +# -------------------------------------------------------------------------- +# Parser +# -------------------------------------------------------------------------- + +class Term: + __slots__ = ("kind", "value", "line", "curie") + + def __init__(self, kind, value, line, curie=None): + self.kind = kind # iri | lit | list | bnode + self.value = value # str | list[Term] | list[(Term, Term)] + self.line = line + self.curie = curie # prefixed spelling, when written that way + + +class FileParse: + def __init__(self, path): + self.path = path + self.prefixes = {} + self.statements = [] # (subject Term, [(pred Term, obj Term)]) + self.undeclared = [] # (line, curie) + + +def parse(path, text): + fp = FileParse(path) + toks = list(tokenize(text)) + pos = 0 + + def peek(): + return toks[pos] if pos < len(toks) else (None, None, None) + + def take(kind=None): + nonlocal pos + if pos >= len(toks): + raise ParseError("unexpected end of file") + tok = toks[pos] + if kind is not None and tok[0] != kind: + raise ParseError(f"line {tok[2]}: expected {kind!r}, got {tok[1]!r}") + pos += 1 + return tok + + def resolve(word, line): + if word == "a": + return Term("iri", RDF_TYPE, line, "a") + if word in ("true", "false") or re.fullmatch(r"[+-]?\d+(\.\d+)?", word): + return Term("lit", word, line) + if ":" not in word: + raise ParseError(f"line {line}: bare word {word!r}") + prefix, local = word.split(":", 1) + if prefix not in fp.prefixes: + fp.undeclared.append((line, word)) + return Term("iri", "urn:undeclared:" + word, line, word) + return Term("iri", fp.prefixes[prefix] + local, line, word) + + def obj(): + kind, value, line = peek() + if kind == "iri": + take() + return Term("iri", value, line) + if kind == "lit": + take() + return Term("lit", value, line) + if kind == "word": + take() + return resolve(value, line) + if kind == "(": + take() + items = [] + while peek()[0] != ")": + items.append(obj()) + take(")") + return Term("list", items, line) + if kind == "[": + take() + pairs = pred_obj_list(close="]") + take("]") + return Term("bnode", pairs, line) + raise ParseError(f"line {line}: unexpected {value!r}") + + def pred_obj_list(close): + pairs = [] + while True: + kind = peek()[0] + if kind in (close, None): + return pairs + if kind == ";": + take() + continue + pkind, pvalue, pline = take() + if pkind == "iri": + pred = Term("iri", pvalue, pline) + elif pkind == "word": + pred = resolve(pvalue, pline) + else: + raise ParseError(f"line {pline}: expected a predicate, got {pvalue!r}") + pairs.append((pred, obj())) + while peek()[0] == ",": + take() + pairs.append((pred, obj())) + if peek()[0] not in (";", close): + raise ParseError(f"line {peek()[2]}: expected ';' or {close!r}, got {peek()[1]!r}") + + while pos < len(toks): + kind, value, line = peek() + if kind == "word" and value in ("@prefix", "@PREFIX"): + take() + _, name, pline = take("word") + if not name.endswith(":"): + raise ParseError(f"line {pline}: bad prefix name {name!r}") + _, iri, _ = take("iri") + fp.prefixes[name[:-1]] = iri + take(".") + continue + subject = obj() + pairs = pred_obj_list(close=".") + take(".") + fp.statements.append((subject, pairs)) + return fp + + +# -------------------------------------------------------------------------- +# Model +# -------------------------------------------------------------------------- + +def curie_of(iri, prefixes): + """Spell an IRI with the repository's prefix convention.""" + if iri.startswith("urn:undeclared:"): + return iri[len("urn:undeclared:"):] + best = None + for name, base in prefixes.items(): + if iri.startswith(base) and (best is None or len(base) > len(prefixes[best])): + best = name + if best is None: + return "<" + iri + ">" + return best + ":" + iri[len(prefixes[best]):] + + +def local_name(iri): + return re.split(r"[/#]", iri)[-1] + + +def build(parses): + decls = defaultdict(list) # iri -> [(path, {pred: [obj]})] + prefixes = {} + for fp in parses: + for name, base in fp.prefixes.items(): + prefixes.setdefault(name, base) + for subject, pairs in fp.statements: + if subject.kind != "iri": + continue + props = defaultdict(list) + for pred, o in pairs: + props[pred.value].append(o) + decls[subject.value].append((fp.path, props, subject.line)) + return decls, prefixes + + +def iris(objs): + return {o.value for o in objs if o.kind == "iri"} + + +def classify(decls): + types = {iri: set().union(*(iris(p.get(RDF_TYPE, [])) for _, p, _ in ds)) + for iri, ds in decls.items()} + supers = {iri: set().union(*(iris(p.get(SUBCLASS, [])) for _, p, _ in ds)) + for iri, ds in decls.items()} + subprops = {iri: set().union(*(iris(p.get(SUBPROP, [])) for _, p, _ in ds)) + for iri, ds in decls.items()} + + classes = {iri for iri, t in types.items() if RDFS_CLASS in t} + + def reaches(iri, root, seen=None): + seen = seen or set() + for s in supers.get(iri, ()): + if s == root: + return True + if s not in seen and s in classes: + seen.add(s) + if reaches(s, root, seen): + return True + return False + + entities = {iri for iri in classes if iri != ENTITY and reaches(iri, ENTITY)} + property_verbs = {iri for iri, sp in subprops.items() if VERB in sp} + class_verbs = {iri for iri in classes if reaches(iri, VERB)} + return types, supers, classes, entities, property_verbs, class_verbs, reaches + + +# -------------------------------------------------------------------------- +# Checks +# -------------------------------------------------------------------------- + +def run(root, files): + findings = [] # (code, path, line, message) + parses = [] + for path in files: + rel = os.path.relpath(path, root) + try: + with open(path, encoding="utf-8") as fh: + text = fh.read() + fp = parse(rel, text) + except (ParseError, UnicodeDecodeError) as exc: + return None, [("PARSE", rel, 0, str(exc))] + for line, curie in fp.undeclared: + findings.append(("C01", rel, line, f"prefix of {curie} is not declared in this file")) + parses.append(fp) + + decls, prefixes = build(parses) + types, supers, classes, entities, pverbs, cverbs, reaches = classify(decls) + verbs = pverbs | cverbs + base_classes = {iri for iri in classes if iri.startswith(OGIT) and "/" not in iri[len(OGIT):]} + + def c(iri): + return curie_of(iri, prefixes) + + # C07, C03, C02, C08 + for iri, ds in decls.items(): + if iri.startswith("urn:undeclared:"): + continue + if len(ds) > 1: + where = ", ".join(p for p, _, _ in ds) + findings.append(("C07", ds[0][0], ds[0][2], f"{c(iri)} is declared in {len(ds)} files: {where}")) + for path, props, line in ds: + stem = os.path.splitext(os.path.basename(path))[0] + if os.path.basename(path) != "ogit.ttl" and local_name(iri) != stem: + findings.append(("C03", path, line, f"{c(iri)} is declared in {os.path.basename(path)}")) + if iri in cverbs: + findings.append(("C02", ds[0][0], ds[0][2], + f"{c(iri)} is an rdfs:Class under ogit:Verb, not an owl:ObjectProperty")) + elif iri in pverbs and OBJECT_PROPERTY not in types.get(iri, ()): + findings.append(("C02", ds[0][0], ds[0][2], + f"{c(iri)} is a sub-property of ogit:Verb but not an owl:ObjectProperty")) + if iri in classes and iri not in base_classes and iri not in entities and iri not in cverbs: + if not any(reaches(iri, b) for b in base_classes): + missing = sorted(c(s) for s in supers.get(iri, ()) if s not in classes) + why = f" (super class {', '.join(missing)} is not declared)" if missing else "" + findings.append(("C08", ds[0][0], ds[0][2], + f"class {c(iri)} does not reach ogit:Entity or another OGIT base class{why}")) + + # Edges: ogit:allowed on entities, ogit:from-to on verbs. + edges = [] # (src, verb, dst, path, line, origin) + for iri, ds in decls.items(): + for path, props, line in ds: + for lst in props.get(ALLOWED, []): + cells = lst.value if lst.kind == "list" else [lst] + for cell in cells: + if cell.kind != "bnode" or len(cell.value) != 1: + findings.append(("C06", path, cell.line, + f"allowed cell of {c(iri)} is not one [ verb target ] pair")) + continue + verb, dst = cell.value[0] + if dst.kind != "iri": + findings.append(("C06", path, cell.line, + f"allowed target of {c(iri)} via {c(verb.value)} is not a term")) + continue + edges.append((iri, verb.value, dst.value, path, cell.line, "allowed")) + for lst in props.get(FROM_TO, []): + cells = lst.value if lst.kind == "list" else [lst] + for cell in cells: + froms = [o for p, o in cell.value if p.value == FROM] if cell.kind == "bnode" else [] + tos = [o for p, o in cell.value if p.value == TO] if cell.kind == "bnode" else [] + if len(froms) != 1 or len(tos) != 1 or froms[0].kind != "iri" or tos[0].kind != "iri": + findings.append(("C06", path, cell.line, + f"from-to cell of {c(iri)} is not one [ ogit:from X ; ogit:to Y ]")) + continue + edges.append((froms[0].value, iri, tos[0].value, path, cell.line, "from-to")) + + for src, verb, dst, path, line, origin in edges: + if verb not in verbs: + findings.append(("C04", path, line, f"verb {c(verb)} ({origin} of {c(src)}) is not declared")) + for end, label in ((src, "source"), (dst, "target")): + if origin == "allowed" and label == "source": + continue + if end not in entities: + findings.append(("C05", path, line, + f"{label} {c(end)} of {c(verb)} ({origin}) is not a declared entity")) + + model = { + "decls": decls, "prefixes": prefixes, "verbs": verbs, "pverbs": pverbs, + "cverbs": cverbs, "types": types, "edges": edges, "entities": entities, + } + return model, findings + + +def write_verbs(path, model): + c = lambda iri: curie_of(iri, model["prefixes"]) + uses = defaultdict(int) + for _, verb, _, _, _, _ in model["edges"]: + uses[verb] += 1 + with open(path, "w", encoding="utf-8") as fh: + fh.write("verb\tfile\tshape\tuses\n") + for verb in sorted(set(model["verbs"]) | set(uses), key=c): + ds = model["decls"].get(verb) + file = ds[0][0] if ds else "" + if verb in model["cverbs"]: + shape = "class" + elif verb in model["pverbs"] and OBJECT_PROPERTY in model["types"].get(verb, ()): + shape = "object-property" + elif verb in model["pverbs"]: + shape = "property" + else: + shape = "undeclared" + fh.write(f"{c(verb)}\t{file}\t{shape}\t{uses[verb]}\n") + + +def write_allowed(path, model): + c = lambda iri: curie_of(iri, model["prefixes"]) + rows = sorted({(c(s), c(v), c(d), p, o) for s, v, d, p, _, o in model["edges"]}) + with open(path, "w", encoding="utf-8") as fh: + fh.write("source\tverb\ttarget\tfile\torigin\n") + for row in rows: + fh.write("\t".join(row) + "\n") + + +def main(argv=None): + ap = argparse.ArgumentParser(description=__doc__.split("\n\n")[0]) + ap.add_argument("root", nargs="?", default=".", help="repository root (default: .)") + ap.add_argument("--warn", action="append", default=[], metavar="CODE", + choices=ALL_CODES, help="report CODE without failing (repeatable)") + ap.add_argument("--emit-verbs", metavar="TSV", help="write the verb catalogue") + ap.add_argument("--emit-allowed", metavar="TSV", help="write the (source, verb, target) table") + ap.add_argument("--exclude", action="append", default=[], metavar="PATH", + help="skip files under PATH, relative to root (repeatable)") + ap.add_argument("--quiet", action="store_true", help="print only the summary") + args = ap.parse_args(argv) + + root = os.path.abspath(args.root) + files = [] + for dirpath, dirnames, filenames in os.walk(root): + dirnames[:] = sorted(d for d in dirnames if d != ".git") + rel_dir = os.path.relpath(dirpath, root) + if any(rel_dir == e or rel_dir.startswith(e.rstrip("/") + os.sep) + for e in (os.path.normpath(x) for x in args.exclude)): + continue + for name in sorted(filenames): + if name.endswith(".ttl") and not name.startswith("graphit-ontology."): + files.append(os.path.join(dirpath, name)) + + model, findings = run(root, files) + if model is None: + for code, path, line, msg in findings: + print(f"{path}: {code}: {msg}", file=sys.stderr) + return 2 + + findings.sort(key=lambda f: (f[0], f[1], f[2])) + counts = defaultdict(int) + for code, path, line, msg in findings: + counts[code] += 1 + if not args.quiet: + level = "warning" if code in args.warn else "error" + print(f"{path}:{line}: {level} {code}: {msg}") + + if args.emit_verbs: + write_verbs(args.emit_verbs, model) + if args.emit_allowed: + write_allowed(args.emit_allowed, model) + + errors = sum(n for code, n in counts.items() if code not in args.warn) + summary = ", ".join(f"{code}={counts[code]}" for code in ALL_CODES if counts[code]) + print(f"import_check: {len(files)} files, {len(model['entities'])} entities, " + f"{len(model['verbs'])} verbs, {len(model['edges'])} edges; " + f"{errors} error(s){'; ' + summary if summary else ''}") + return 1 if errors else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/test_import_check.py b/tools/test_import_check.py new file mode 100644 index 0000000000..a006922db4 --- /dev/null +++ b/tools/test_import_check.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python3 +"""Tests for tools/import_check.py. Run: python3 -I tools/test_import_check.py""" + +import os +import sys +import tempfile +import unittest + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +import import_check # noqa: E402 + +HEAD = """@prefix ogit: . +@prefix ogit.T: . +@prefix rdfs: . +@prefix owl: . +""" + +BASE = { + "ogit.ttl": HEAD + """ +ogit:Entity a rdfs:Class . +ogit:Verb a rdfs:Class . +""", + "T/entities/A.ttl": HEAD + """ +ogit.T:A a rdfs:Class ; rdfs:subClassOf ogit:Entity ; + rdfs:label "A" ; ogit:description \"\"\"says \\"x\\"\"\"\" ; + ogit:allowed ( [ ogit.T:links ogit.T:B ] ) . +""", + "T/entities/B.ttl": HEAD + """ +ogit.T:B a rdfs:Class ; rdfs:subClassOf ogit.T:A . +""", + "T/verbs/links.ttl": HEAD + """ +ogit.T:links a owl:ObjectProperty ; rdfs:subPropertyOf ogit:Verb . +""", +} + + +def run(overrides): + files = dict(BASE) + files.update(overrides) + with tempfile.TemporaryDirectory() as root: + paths = [] + for rel, text in files.items(): + if text is None: + continue + path = os.path.join(root, rel) + os.makedirs(os.path.dirname(path), exist_ok=True) + with open(path, "w", encoding="utf-8") as fh: + fh.write(text) + paths.append(path) + model, findings = import_check.run(root, sorted(paths)) + return model, sorted({f[0] for f in findings}) + + +class ImportCheck(unittest.TestCase): + def test_clean_repository_has_no_findings(self): + model, codes = run({}) + self.assertEqual(codes, []) + self.assertEqual(len(model["edges"]), 1) + self.assertEqual(len(model["entities"]), 2) + + def test_c01_undeclared_prefix(self): + _, codes = run({"T/entities/C.ttl": HEAD + "ogit.T:C a rdfs:Class ; rdfs:subClassOf ogit:Entity ; ogit:allowed ( [ ogit.T:links ogit.X:Y ] ) .\n"}) + self.assertIn("C01", codes) + + def test_c02_class_shaped_verb(self): + _, codes = run({"T/verbs/links.ttl": HEAD + "ogit.T:links a rdfs:Class ; rdfs:subClassOf ogit:Verb .\n"}) + self.assertEqual(codes, ["C02"]) + + def test_c03_file_name_case(self): + _, codes = run({"T/verbs/links.ttl": None, + "T/verbs/Links.ttl": BASE["T/verbs/links.ttl"]}) + self.assertEqual(codes, ["C03"]) + + def test_c04_undeclared_verb(self): + _, codes = run({"T/verbs/links.ttl": None}) + self.assertEqual(codes, ["C04"]) + + def test_c05_target_is_not_an_entity(self): + _, codes = run({"T/entities/B.ttl": None}) + self.assertEqual(codes, ["C05"]) + + def test_c06_malformed_cell(self): + _, codes = run({"T/entities/A.ttl": HEAD + "ogit.T:A a rdfs:Class ; rdfs:subClassOf ogit:Entity ; ogit:allowed ( ogit.T:links ) .\n"}) + self.assertIn("C06", codes) + + def test_c07_duplicate_declaration(self): + _, codes = run({"T/entities/B2.ttl": HEAD + "ogit.T:B a rdfs:Class ; rdfs:subClassOf ogit.T:A .\n"}) + self.assertIn("C07", codes) + + def test_c08_class_off_the_tree(self): + _, codes = run({"T/entities/E.ttl": HEAD + "ogit.T:E a rdfs:Class ; rdfs:subClassOf ogit:Enumeration .\n"}) + self.assertEqual(codes, ["C08"]) + + def test_from_to_edges_are_collected_and_checked(self): + verb = HEAD + "ogit.T:has a rdfs:Class ; rdfs:subClassOf ogit:Verb ; ogit:from-to ( [ ogit:from ogit.T:A ; ogit:to ogit.T:Z ] ) .\n" + model, codes = run({"T/verbs/has.ttl": verb}) + self.assertEqual(codes, ["C02", "C05"]) + self.assertEqual(sum(1 for e in model["edges"] if e[5] == "from-to"), 1) + + def test_parse_error_is_reported_not_raised(self): + model, codes = run({"T/entities/B.ttl": HEAD + "ogit.T:B a rdfs:Class ; rdfs:label \"open\n"}) + self.assertIsNone(model) + self.assertEqual(codes, ["PARSE"]) + + +if __name__ == "__main__": + unittest.main() From ba8d5cf38167672d8930e9e757c6d6b5c5058c08 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 28 Oct 2026 02:03:23 +0000 Subject: [PATCH 02/16] Declare the two prefixes FiscalJurisdiction.ttl uses ogit.Compliance: and ogit.FinancialMarket: were used on lines 28-29 but not declared, which made the validator stop on this file before reporting anything else. Both targets exist (NTO/Compliance/entities/SanctionsEntry.ttl, NTO/FinancialMarket/entities/Country.ttl). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMPWTwovjYJEUMuGPb4 --- NTO/Accounting/entities/FiscalJurisdiction.ttl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NTO/Accounting/entities/FiscalJurisdiction.ttl b/NTO/Accounting/entities/FiscalJurisdiction.ttl index 87a8c1448a..8a7ae84cd4 100644 --- a/NTO/Accounting/entities/FiscalJurisdiction.ttl +++ b/NTO/Accounting/entities/FiscalJurisdiction.ttl @@ -1,5 +1,7 @@ @prefix ogit.Accounting: . @prefix ogit: . +@prefix ogit.Compliance: . +@prefix ogit.FinancialMarket: . @prefix rdfs: . @prefix dcterms: . From dc50e4ffe771665498be056857042de4034957e7 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 28 Oct 2026 02:22:35 +0000 Subject: [PATCH 03/16] Name the WorkOrder verb files after the verbs they declare The validator requires a file to be named after the term it declares. The twelve verbs are lowercase (ogit.WorkOrder:hasActivity); their files were capitalised (HasActivity.ttl). Content is unchanged. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMPWTwovjYJEUMuGPb4 --- NTO/WorkOrder/verbs/{AccessesPortal.ttl => accessesPortal.ttl} | 0 NTO/WorkOrder/verbs/{Assigned.ttl => assigned.ttl} | 0 NTO/WorkOrder/verbs/{BelongsToTenant.ttl => belongsToTenant.ttl} | 0 NTO/WorkOrder/verbs/{Drives.ttl => drives.ttl} | 0 NTO/WorkOrder/verbs/{HasActivity.ttl => hasActivity.ttl} | 0 NTO/WorkOrder/verbs/{HasHistory.ttl => hasHistory.ttl} | 0 NTO/WorkOrder/verbs/{HasPicture.ttl => hasPicture.ttl} | 0 NTO/WorkOrder/verbs/{HasPosition.ttl => hasPosition.ttl} | 0 NTO/WorkOrder/verbs/{Issued.ttl => issued.ttl} | 0 NTO/WorkOrder/verbs/{LogsTime.ttl => logsTime.ttl} | 0 NTO/WorkOrder/verbs/{OwnsPasswords.ttl => ownsPasswords.ttl} | 0 NTO/WorkOrder/verbs/{RefersToArticle.ttl => refersToArticle.ttl} | 0 12 files changed, 0 insertions(+), 0 deletions(-) rename NTO/WorkOrder/verbs/{AccessesPortal.ttl => accessesPortal.ttl} (100%) rename NTO/WorkOrder/verbs/{Assigned.ttl => assigned.ttl} (100%) rename NTO/WorkOrder/verbs/{BelongsToTenant.ttl => belongsToTenant.ttl} (100%) rename NTO/WorkOrder/verbs/{Drives.ttl => drives.ttl} (100%) rename NTO/WorkOrder/verbs/{HasActivity.ttl => hasActivity.ttl} (100%) rename NTO/WorkOrder/verbs/{HasHistory.ttl => hasHistory.ttl} (100%) rename NTO/WorkOrder/verbs/{HasPicture.ttl => hasPicture.ttl} (100%) rename NTO/WorkOrder/verbs/{HasPosition.ttl => hasPosition.ttl} (100%) rename NTO/WorkOrder/verbs/{Issued.ttl => issued.ttl} (100%) rename NTO/WorkOrder/verbs/{LogsTime.ttl => logsTime.ttl} (100%) rename NTO/WorkOrder/verbs/{OwnsPasswords.ttl => ownsPasswords.ttl} (100%) rename NTO/WorkOrder/verbs/{RefersToArticle.ttl => refersToArticle.ttl} (100%) diff --git a/NTO/WorkOrder/verbs/AccessesPortal.ttl b/NTO/WorkOrder/verbs/accessesPortal.ttl similarity index 100% rename from NTO/WorkOrder/verbs/AccessesPortal.ttl rename to NTO/WorkOrder/verbs/accessesPortal.ttl diff --git a/NTO/WorkOrder/verbs/Assigned.ttl b/NTO/WorkOrder/verbs/assigned.ttl similarity index 100% rename from NTO/WorkOrder/verbs/Assigned.ttl rename to NTO/WorkOrder/verbs/assigned.ttl diff --git a/NTO/WorkOrder/verbs/BelongsToTenant.ttl b/NTO/WorkOrder/verbs/belongsToTenant.ttl similarity index 100% rename from NTO/WorkOrder/verbs/BelongsToTenant.ttl rename to NTO/WorkOrder/verbs/belongsToTenant.ttl diff --git a/NTO/WorkOrder/verbs/Drives.ttl b/NTO/WorkOrder/verbs/drives.ttl similarity index 100% rename from NTO/WorkOrder/verbs/Drives.ttl rename to NTO/WorkOrder/verbs/drives.ttl diff --git a/NTO/WorkOrder/verbs/HasActivity.ttl b/NTO/WorkOrder/verbs/hasActivity.ttl similarity index 100% rename from NTO/WorkOrder/verbs/HasActivity.ttl rename to NTO/WorkOrder/verbs/hasActivity.ttl diff --git a/NTO/WorkOrder/verbs/HasHistory.ttl b/NTO/WorkOrder/verbs/hasHistory.ttl similarity index 100% rename from NTO/WorkOrder/verbs/HasHistory.ttl rename to NTO/WorkOrder/verbs/hasHistory.ttl diff --git a/NTO/WorkOrder/verbs/HasPicture.ttl b/NTO/WorkOrder/verbs/hasPicture.ttl similarity index 100% rename from NTO/WorkOrder/verbs/HasPicture.ttl rename to NTO/WorkOrder/verbs/hasPicture.ttl diff --git a/NTO/WorkOrder/verbs/HasPosition.ttl b/NTO/WorkOrder/verbs/hasPosition.ttl similarity index 100% rename from NTO/WorkOrder/verbs/HasPosition.ttl rename to NTO/WorkOrder/verbs/hasPosition.ttl diff --git a/NTO/WorkOrder/verbs/Issued.ttl b/NTO/WorkOrder/verbs/issued.ttl similarity index 100% rename from NTO/WorkOrder/verbs/Issued.ttl rename to NTO/WorkOrder/verbs/issued.ttl diff --git a/NTO/WorkOrder/verbs/LogsTime.ttl b/NTO/WorkOrder/verbs/logsTime.ttl similarity index 100% rename from NTO/WorkOrder/verbs/LogsTime.ttl rename to NTO/WorkOrder/verbs/logsTime.ttl diff --git a/NTO/WorkOrder/verbs/OwnsPasswords.ttl b/NTO/WorkOrder/verbs/ownsPasswords.ttl similarity index 100% rename from NTO/WorkOrder/verbs/OwnsPasswords.ttl rename to NTO/WorkOrder/verbs/ownsPasswords.ttl diff --git a/NTO/WorkOrder/verbs/RefersToArticle.ttl b/NTO/WorkOrder/verbs/refersToArticle.ttl similarity index 100% rename from NTO/WorkOrder/verbs/RefersToArticle.ttl rename to NTO/WorkOrder/verbs/refersToArticle.ttl From deb53d19cb14a49ddd0f571b9ab6457becb123bc Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 28 Oct 2026 02:22:35 +0000 Subject: [PATCH 04/16] Declare rdfs: and dcterms: in the three NTO/PTF entities Dummy.ttl, HiroTopology.ttl and Test.ttl use both prefixes without declaring them. The validator's parser fills them in from its defaults; other Turtle readers reject the files. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMPWTwovjYJEUMuGPb4 --- NTO/PTF/entities/Dummy.ttl | 2 ++ NTO/PTF/entities/HiroTopology.ttl | 2 ++ NTO/PTF/entities/Test.ttl | 2 ++ 3 files changed, 6 insertions(+) diff --git a/NTO/PTF/entities/Dummy.ttl b/NTO/PTF/entities/Dummy.ttl index 18d6e69c8b..1bf670a30e 100644 --- a/NTO/PTF/entities/Dummy.ttl +++ b/NTO/PTF/entities/Dummy.ttl @@ -1,5 +1,7 @@ @prefix ogit.PTF: . @prefix ogit: . +@prefix rdfs: . +@prefix dcterms: . ogit.PTF:Dummy a rdfs:Class; diff --git a/NTO/PTF/entities/HiroTopology.ttl b/NTO/PTF/entities/HiroTopology.ttl index 40c291ad8b..b914e241f2 100644 --- a/NTO/PTF/entities/HiroTopology.ttl +++ b/NTO/PTF/entities/HiroTopology.ttl @@ -1,5 +1,7 @@ @prefix ogit.PTF: . @prefix ogit: . +@prefix rdfs: . +@prefix dcterms: . ogit.PTF:HiroTopology a rdfs:Class; diff --git a/NTO/PTF/entities/Test.ttl b/NTO/PTF/entities/Test.ttl index 84a1ab084a..41eb47e66c 100644 --- a/NTO/PTF/entities/Test.ttl +++ b/NTO/PTF/entities/Test.ttl @@ -1,4 +1,6 @@ @prefix ogit: . +@prefix rdfs: . +@prefix dcterms: . @prefix ogit.MARS: . @prefix ogit.PTF: . From 53ad7f7dfbb339d26d3dd7cef96517aa789bb77f Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 28 Oct 2026 02:22:35 +0000 Subject: [PATCH 05/16] Make the Healthcare enumerations entities They were subclasses of ogit:Enumeration, which OGIT does not declare, and Medication's ogit:allowed list targets five of them, which the validator rejects as missing entities. Their bodies are already entity-shaped (ogit:id, ogit:parent, attribute lists, ogit:allowed); only the superclass and the missing dcterms:valid change. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMPWTwovjYJEUMuGPb4 --- NTO/Healthcare/enumerations/combo_addtreatment.ttl | 3 ++- NTO/Healthcare/enumerations/combo_medication_dailydose.ttl | 3 ++- NTO/Healthcare/enumerations/combo_medication_dose_unit.ttl | 3 ++- NTO/Healthcare/enumerations/combo_medication_interval.ttl | 3 ++- NTO/Healthcare/enumerations/combo_medication_stop_reason.ttl | 3 ++- NTO/Healthcare/enumerations/combo_medication_typ.ttl | 3 ++- NTO/Healthcare/enumerations/combo_spez.ttl | 3 ++- 7 files changed, 14 insertions(+), 7 deletions(-) diff --git a/NTO/Healthcare/enumerations/combo_addtreatment.ttl b/NTO/Healthcare/enumerations/combo_addtreatment.ttl index f7b7eb15e6..6c8094a863 100644 --- a/NTO/Healthcare/enumerations/combo_addtreatment.ttl +++ b/NTO/Healthcare/enumerations/combo_addtreatment.ttl @@ -7,8 +7,9 @@ ogit.Healthcare:combo_addtreatment a rdfs:Class; - rdfs:subClassOf ogit:Enumeration; + rdfs:subClassOf ogit:Entity; rdfs:label "combo_addtreatment"; + dcterms:valid "start=2026-10-10;"; dcterms:description "Enumeration of additional-treatment categories attached to a clinical record. Values populated as a follow-on import from MedCare-rs."; dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:combo_addtreatment"; dcterms:creator "claude-ogit-bootstrap"; diff --git a/NTO/Healthcare/enumerations/combo_medication_dailydose.ttl b/NTO/Healthcare/enumerations/combo_medication_dailydose.ttl index 27a37ae8cf..f8007a6ed8 100644 --- a/NTO/Healthcare/enumerations/combo_medication_dailydose.ttl +++ b/NTO/Healthcare/enumerations/combo_medication_dailydose.ttl @@ -7,8 +7,9 @@ ogit.Healthcare:combo_medication_dailydose a rdfs:Class; - rdfs:subClassOf ogit:Enumeration; + rdfs:subClassOf ogit:Entity; rdfs:label "combo_medication_dailydose"; + dcterms:valid "start=2026-10-10;"; dcterms:description "Enumeration of medication daily-dose patterns. Values populated as a follow-on import from MedCare-rs."; dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:combo_medication_dailydose"; dcterms:creator "claude-ogit-bootstrap"; diff --git a/NTO/Healthcare/enumerations/combo_medication_dose_unit.ttl b/NTO/Healthcare/enumerations/combo_medication_dose_unit.ttl index b2b4e57c97..fbeb11c198 100644 --- a/NTO/Healthcare/enumerations/combo_medication_dose_unit.ttl +++ b/NTO/Healthcare/enumerations/combo_medication_dose_unit.ttl @@ -7,8 +7,9 @@ ogit.Healthcare:combo_medication_dose_unit a rdfs:Class; - rdfs:subClassOf ogit:Enumeration; + rdfs:subClassOf ogit:Entity; rdfs:label "combo_medication_dose_unit"; + dcterms:valid "start=2026-10-10;"; dcterms:description "Enumeration of medication dose units (mg, ml, IU, etc.). Values populated as a follow-on import from MedCare-rs."; dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:combo_medication_dose_unit"; dcterms:creator "claude-ogit-bootstrap"; diff --git a/NTO/Healthcare/enumerations/combo_medication_interval.ttl b/NTO/Healthcare/enumerations/combo_medication_interval.ttl index 57e7d33ae8..6614096481 100644 --- a/NTO/Healthcare/enumerations/combo_medication_interval.ttl +++ b/NTO/Healthcare/enumerations/combo_medication_interval.ttl @@ -7,8 +7,9 @@ ogit.Healthcare:combo_medication_interval a rdfs:Class; - rdfs:subClassOf ogit:Enumeration; + rdfs:subClassOf ogit:Entity; rdfs:label "combo_medication_interval"; + dcterms:valid "start=2026-10-10;"; dcterms:description "Enumeration of medication administration intervals (e.g. once-a-day, twice-a-day, weekly). Values populated as a follow-on import from MedCare-rs."; dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:combo_medication_interval"; dcterms:creator "claude-ogit-bootstrap"; diff --git a/NTO/Healthcare/enumerations/combo_medication_stop_reason.ttl b/NTO/Healthcare/enumerations/combo_medication_stop_reason.ttl index d787d1dc6c..f8b4357fbb 100644 --- a/NTO/Healthcare/enumerations/combo_medication_stop_reason.ttl +++ b/NTO/Healthcare/enumerations/combo_medication_stop_reason.ttl @@ -7,8 +7,9 @@ ogit.Healthcare:combo_medication_stop_reason a rdfs:Class; - rdfs:subClassOf ogit:Enumeration; + rdfs:subClassOf ogit:Entity; rdfs:label "combo_medication_stop_reason"; + dcterms:valid "start=2026-10-10;"; dcterms:description "Enumeration of reasons for stopping a medication (cured, side-effect, replaced, etc.). Values populated as a follow-on import from MedCare-rs."; dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:combo_medication_stop_reason"; dcterms:creator "claude-ogit-bootstrap"; diff --git a/NTO/Healthcare/enumerations/combo_medication_typ.ttl b/NTO/Healthcare/enumerations/combo_medication_typ.ttl index ccbab9fcac..70135afdb1 100644 --- a/NTO/Healthcare/enumerations/combo_medication_typ.ttl +++ b/NTO/Healthcare/enumerations/combo_medication_typ.ttl @@ -7,8 +7,9 @@ ogit.Healthcare:combo_medication_typ a rdfs:Class; - rdfs:subClassOf ogit:Enumeration; + rdfs:subClassOf ogit:Entity; rdfs:label "combo_medication_typ"; + dcterms:valid "start=2026-10-10;"; dcterms:description "Enumeration of medication types (oral / IV / topical / etc.). Values populated as a follow-on import from MedCare-rs."; dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:combo_medication_typ"; dcterms:creator "claude-ogit-bootstrap"; diff --git a/NTO/Healthcare/enumerations/combo_spez.ttl b/NTO/Healthcare/enumerations/combo_spez.ttl index 9880edf7d3..949f351a88 100644 --- a/NTO/Healthcare/enumerations/combo_spez.ttl +++ b/NTO/Healthcare/enumerations/combo_spez.ttl @@ -7,8 +7,9 @@ ogit.Healthcare:combo_spez a rdfs:Class; - rdfs:subClassOf ogit:Enumeration; + rdfs:subClassOf ogit:Entity; rdfs:label "combo_spez"; + dcterms:valid "start=2026-10-10;"; dcterms:description "Enumeration of medical specialties / Fachrichtungen used to scope diagnoses, therapies and patient profiles. Values populated as a follow-on import from MedCare-rs."; dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:combo_spez"; dcterms:creator "claude-ogit-bootstrap"; From 9bf372e778e022f3652e88499ec96b47ba264b5f Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 28 Oct 2026 02:22:35 +0000 Subject: [PATCH 06/16] Fix the Healthcare edges the validator rejects - LabValue: loincRef is an attribute (its own description says so), so it moves from an ogit:allowed edge into optional-attributes. - Patient: ogit:Tenant does not exist; OGIT records tenancy with the ogit:tenantId attribute, so the edge becomes that attribute. - Assessment: ogit:assesses was undeclared. It becomes ogit.Healthcare:assesses in NTO/Healthcare/verbs, and ogit.Healthcare:AnatomicalStructure, its target, is declared as an entity. - The three Assessment subclasses move into their own files. - The inline attribute definitions move into NTO/Healthcare/attributes/, one file per attribute, as owl:DatatypeProperty + rdfs:subPropertyOf ogit:Attribute. Their IRIs are unchanged. - Entities gain the dcterms:valid line validation0.rq requires. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMPWTwovjYJEUMuGPb4 --- NTO/Healthcare/attributes/anomize.ttl | 16 +++ NTO/Healthcare/attributes/birth.ttl | 16 +++ .../attributes/bloodPressureDiastolic.ttl | 16 +++ .../attributes/bloodPressureSystolic.ttl | 16 +++ NTO/Healthcare/attributes/country.ttl | 16 +++ NTO/Healthcare/attributes/createDate.ttl | 16 +++ NTO/Healthcare/attributes/datum.ttl | 16 +++ NTO/Healthcare/attributes/dbSourceDb.ttl | 16 +++ NTO/Healthcare/attributes/dbSourceId.ttl | 16 +++ NTO/Healthcare/attributes/dbSpezId.ttl | 16 +++ NTO/Healthcare/attributes/ethnic.ttl | 16 +++ NTO/Healthcare/attributes/fileDate.ttl | 16 +++ NTO/Healthcare/attributes/fileDiag.ttl | 16 +++ NTO/Healthcare/attributes/fileIcd.ttl | 16 +++ NTO/Healthcare/attributes/fileKd.ttl | 16 +++ NTO/Healthcare/attributes/fileKeyword.ttl | 16 +++ NTO/Healthcare/attributes/fileLd.ttl | 16 +++ .../attributes/fileMedicineDose.ttl | 16 +++ .../attributes/fileMedicineName.ttl | 16 +++ NTO/Healthcare/attributes/fileMedicineTyp.ttl | 16 +++ NTO/Healthcare/attributes/fileNotice.ttl | 16 +++ NTO/Healthcare/attributes/filePraepId.ttl | 16 +++ NTO/Healthcare/attributes/fileStart.ttl | 16 +++ NTO/Healthcare/attributes/fileStop.ttl | 16 +++ NTO/Healthcare/attributes/fileText.ttl | 16 +++ NTO/Healthcare/attributes/findingSummary.ttl | 16 +++ NTO/Healthcare/attributes/firstname.ttl | 16 +++ NTO/Healthcare/attributes/labId.ttl | 16 +++ NTO/Healthcare/attributes/lastname.ttl | 16 +++ NTO/Healthcare/attributes/loginAt.ttl | 16 +++ NTO/Healthcare/attributes/logoutAt.ttl | 16 +++ NTO/Healthcare/attributes/loincId.ttl | 16 +++ NTO/Healthcare/attributes/loincRef.ttl | 16 +++ NTO/Healthcare/attributes/mail.ttl | 16 +++ .../attributes/medicationDailyDose.ttl | 16 +++ .../attributes/medicationDoseUnit.ttl | 16 +++ .../attributes/medicationInterval.ttl | 16 +++ .../attributes/medicationStopReason.ttl | 16 +++ NTO/Healthcare/attributes/mobil.ttl | 16 +++ NTO/Healthcare/attributes/noticeForDoc.ttl | 16 +++ NTO/Healthcare/attributes/performedAt.ttl | 16 +++ NTO/Healthcare/attributes/place.ttl | 16 +++ NTO/Healthcare/attributes/priority.ttl | 16 +++ NTO/Healthcare/attributes/pulse.ttl | 16 +++ NTO/Healthcare/attributes/sexd.ttl | 16 +++ NTO/Healthcare/attributes/sexf.ttl | 16 +++ NTO/Healthcare/attributes/sexm.ttl | 16 +++ NTO/Healthcare/attributes/spez.ttl | 16 +++ NTO/Healthcare/attributes/street.ttl | 16 +++ NTO/Healthcare/attributes/timeInWaiting.ttl | 16 +++ NTO/Healthcare/attributes/title1.ttl | 16 +++ NTO/Healthcare/attributes/title2.ttl | 16 +++ NTO/Healthcare/attributes/toDocId.ttl | 16 +++ NTO/Healthcare/attributes/waitingroomId.ttl | 16 +++ NTO/Healthcare/attributes/werte.ttl | 16 +++ NTO/Healthcare/attributes/zip.ttl | 16 +++ .../entities/AnatomicalStructure.ttl | 26 ++++ NTO/Healthcare/entities/Assessment.ttl | 63 +-------- NTO/Healthcare/entities/Diagnosis.ttl | 57 +------- .../entities/HistologicAssessment.ttl | 20 +++ NTO/Healthcare/entities/LabValue.ttl | 31 +---- NTO/Healthcare/entities/Medication.ttl | 78 +---------- NTO/Healthcare/entities/MriAssessment.ttl | 20 +++ NTO/Healthcare/entities/Patient.ttl | 122 +----------------- .../entities/SonographicAssessment.ttl | 20 +++ NTO/Healthcare/entities/Treatment.ttl | 22 +--- NTO/Healthcare/entities/Visit.ttl | 50 +------ NTO/Healthcare/entities/VitalSign.ttl | 29 +---- NTO/Healthcare/verbs/assesses.ttl | 14 ++ 69 files changed, 1007 insertions(+), 441 deletions(-) create mode 100644 NTO/Healthcare/attributes/anomize.ttl create mode 100644 NTO/Healthcare/attributes/birth.ttl create mode 100644 NTO/Healthcare/attributes/bloodPressureDiastolic.ttl create mode 100644 NTO/Healthcare/attributes/bloodPressureSystolic.ttl create mode 100644 NTO/Healthcare/attributes/country.ttl create mode 100644 NTO/Healthcare/attributes/createDate.ttl create mode 100644 NTO/Healthcare/attributes/datum.ttl create mode 100644 NTO/Healthcare/attributes/dbSourceDb.ttl create mode 100644 NTO/Healthcare/attributes/dbSourceId.ttl create mode 100644 NTO/Healthcare/attributes/dbSpezId.ttl create mode 100644 NTO/Healthcare/attributes/ethnic.ttl create mode 100644 NTO/Healthcare/attributes/fileDate.ttl create mode 100644 NTO/Healthcare/attributes/fileDiag.ttl create mode 100644 NTO/Healthcare/attributes/fileIcd.ttl create mode 100644 NTO/Healthcare/attributes/fileKd.ttl create mode 100644 NTO/Healthcare/attributes/fileKeyword.ttl create mode 100644 NTO/Healthcare/attributes/fileLd.ttl create mode 100644 NTO/Healthcare/attributes/fileMedicineDose.ttl create mode 100644 NTO/Healthcare/attributes/fileMedicineName.ttl create mode 100644 NTO/Healthcare/attributes/fileMedicineTyp.ttl create mode 100644 NTO/Healthcare/attributes/fileNotice.ttl create mode 100644 NTO/Healthcare/attributes/filePraepId.ttl create mode 100644 NTO/Healthcare/attributes/fileStart.ttl create mode 100644 NTO/Healthcare/attributes/fileStop.ttl create mode 100644 NTO/Healthcare/attributes/fileText.ttl create mode 100644 NTO/Healthcare/attributes/findingSummary.ttl create mode 100644 NTO/Healthcare/attributes/firstname.ttl create mode 100644 NTO/Healthcare/attributes/labId.ttl create mode 100644 NTO/Healthcare/attributes/lastname.ttl create mode 100644 NTO/Healthcare/attributes/loginAt.ttl create mode 100644 NTO/Healthcare/attributes/logoutAt.ttl create mode 100644 NTO/Healthcare/attributes/loincId.ttl create mode 100644 NTO/Healthcare/attributes/loincRef.ttl create mode 100644 NTO/Healthcare/attributes/mail.ttl create mode 100644 NTO/Healthcare/attributes/medicationDailyDose.ttl create mode 100644 NTO/Healthcare/attributes/medicationDoseUnit.ttl create mode 100644 NTO/Healthcare/attributes/medicationInterval.ttl create mode 100644 NTO/Healthcare/attributes/medicationStopReason.ttl create mode 100644 NTO/Healthcare/attributes/mobil.ttl create mode 100644 NTO/Healthcare/attributes/noticeForDoc.ttl create mode 100644 NTO/Healthcare/attributes/performedAt.ttl create mode 100644 NTO/Healthcare/attributes/place.ttl create mode 100644 NTO/Healthcare/attributes/priority.ttl create mode 100644 NTO/Healthcare/attributes/pulse.ttl create mode 100644 NTO/Healthcare/attributes/sexd.ttl create mode 100644 NTO/Healthcare/attributes/sexf.ttl create mode 100644 NTO/Healthcare/attributes/sexm.ttl create mode 100644 NTO/Healthcare/attributes/spez.ttl create mode 100644 NTO/Healthcare/attributes/street.ttl create mode 100644 NTO/Healthcare/attributes/timeInWaiting.ttl create mode 100644 NTO/Healthcare/attributes/title1.ttl create mode 100644 NTO/Healthcare/attributes/title2.ttl create mode 100644 NTO/Healthcare/attributes/toDocId.ttl create mode 100644 NTO/Healthcare/attributes/waitingroomId.ttl create mode 100644 NTO/Healthcare/attributes/werte.ttl create mode 100644 NTO/Healthcare/attributes/zip.ttl create mode 100644 NTO/Healthcare/entities/AnatomicalStructure.ttl create mode 100644 NTO/Healthcare/entities/HistologicAssessment.ttl create mode 100644 NTO/Healthcare/entities/MriAssessment.ttl create mode 100644 NTO/Healthcare/entities/SonographicAssessment.ttl create mode 100644 NTO/Healthcare/verbs/assesses.ttl diff --git a/NTO/Healthcare/attributes/anomize.ttl b/NTO/Healthcare/attributes/anomize.ttl new file mode 100644 index 0000000000..00adc7f4a5 --- /dev/null +++ b/NTO/Healthcare/attributes/anomize.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:anomize + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "anomize"; + dcterms:description "Anonymisation flag for research export (praxis_patient.p_anomize)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_anomize"; + ogit:type "xsd:boolean"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/birth.ttl b/NTO/Healthcare/attributes/birth.ttl new file mode 100644 index 0000000000..0debfab912 --- /dev/null +++ b/NTO/Healthcare/attributes/birth.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:birth + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "birth"; + dcterms:description "Patient date of birth (praxis_patient.p_birth)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_birth"; + ogit:type "xsd:dateTime"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/bloodPressureDiastolic.ttl b/NTO/Healthcare/attributes/bloodPressureDiastolic.ttl new file mode 100644 index 0000000000..29af642714 --- /dev/null +++ b/NTO/Healthcare/attributes/bloodPressureDiastolic.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:bloodPressureDiastolic + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "bloodPressureDiastolic"; + dcterms:description "Diastolic blood pressure in mmHg (pf_vital_bloodpressure.dia)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_vital_bloodpressure.dia"; + ogit:type "xsd:float"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/bloodPressureSystolic.ttl b/NTO/Healthcare/attributes/bloodPressureSystolic.ttl new file mode 100644 index 0000000000..429f3ec363 --- /dev/null +++ b/NTO/Healthcare/attributes/bloodPressureSystolic.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:bloodPressureSystolic + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "bloodPressureSystolic"; + dcterms:description "Systolic blood pressure in mmHg (pf_vital_bloodpressure.sys)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_vital_bloodpressure.sys"; + ogit:type "xsd:float"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/country.ttl b/NTO/Healthcare/attributes/country.ttl new file mode 100644 index 0000000000..c7daf9a116 --- /dev/null +++ b/NTO/Healthcare/attributes/country.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:country + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "country"; + dcterms:description "Patient country (praxis_patient.p_country)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_country"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/createDate.ttl b/NTO/Healthcare/attributes/createDate.ttl new file mode 100644 index 0000000000..4c512f440d --- /dev/null +++ b/NTO/Healthcare/attributes/createDate.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:createDate + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "createDate"; + dcterms:description "Entry creation timestamp (pf_diagnosis.d_createdate)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_diagnosis.d_createdate"; + ogit:type "xsd:dateTime"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/datum.ttl b/NTO/Healthcare/attributes/datum.ttl new file mode 100644 index 0000000000..4095837529 --- /dev/null +++ b/NTO/Healthcare/attributes/datum.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:datum + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "datum"; + dcterms:description "Measurement timestamp (pf_vital_bloodpressure.datum)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_vital_bloodpressure.datum"; + ogit:type "xsd:dateTime"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/dbSourceDb.ttl b/NTO/Healthcare/attributes/dbSourceDb.ttl new file mode 100644 index 0000000000..193aeb445d --- /dev/null +++ b/NTO/Healthcare/attributes/dbSourceDb.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:dbSourceDb + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "dbSourceDb"; + dcterms:description "Provenance: name of the source database the row was imported from (pf_therapy.db_sourcedb)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_therapy.db_sourcedb"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/dbSourceId.ttl b/NTO/Healthcare/attributes/dbSourceId.ttl new file mode 100644 index 0000000000..6e3990c096 --- /dev/null +++ b/NTO/Healthcare/attributes/dbSourceId.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:dbSourceId + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "dbSourceId"; + dcterms:description "Provenance: row id in the source database (pf_therapy.db_sourceid)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_therapy.db_sourceid"; + ogit:type "xsd:integer"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/dbSpezId.ttl b/NTO/Healthcare/attributes/dbSpezId.ttl new file mode 100644 index 0000000000..5b325966c3 --- /dev/null +++ b/NTO/Healthcare/attributes/dbSpezId.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:dbSpezId + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "dbSpezId"; + dcterms:description "Specialty FK -> combo_spez.id (pf_diagnosis.db_spezid)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_diagnosis.db_spezid"; + ogit:type "xsd:integer"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/ethnic.ttl b/NTO/Healthcare/attributes/ethnic.ttl new file mode 100644 index 0000000000..5547b08f0d --- /dev/null +++ b/NTO/Healthcare/attributes/ethnic.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:ethnic + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "ethnic"; + dcterms:description "Self-declared ethnicity (praxis_patient.p_ethnic)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_ethnic"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/fileDate.ttl b/NTO/Healthcare/attributes/fileDate.ttl new file mode 100644 index 0000000000..2670476671 --- /dev/null +++ b/NTO/Healthcare/attributes/fileDate.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:fileDate + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "fileDate"; + dcterms:description "Clinical event date the diagnosis refers to (pf_diagnosis.file_date)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_diagnosis.file_date"; + ogit:type "xsd:dateTime"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/fileDiag.ttl b/NTO/Healthcare/attributes/fileDiag.ttl new file mode 100644 index 0000000000..1b92d58575 --- /dev/null +++ b/NTO/Healthcare/attributes/fileDiag.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:fileDiag + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "fileDiag"; + dcterms:description "Short diagnosis label (pf_diagnosis.file_diag)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_diagnosis.file_diag"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/fileIcd.ttl b/NTO/Healthcare/attributes/fileIcd.ttl new file mode 100644 index 0000000000..bdfa112116 --- /dev/null +++ b/NTO/Healthcare/attributes/fileIcd.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:fileIcd + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "fileIcd"; + dcterms:description "ICD-10 code for the diagnosis (pf_diagnosis.file_icd)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_diagnosis.file_icd"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/fileKd.ttl b/NTO/Healthcare/attributes/fileKd.ttl new file mode 100644 index 0000000000..5c2738745d --- /dev/null +++ b/NTO/Healthcare/attributes/fileKd.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:fileKd + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "fileKd"; + dcterms:description "Chronic-diagnosis flag (pf_diagnosis.file_kd)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_diagnosis.file_kd"; + ogit:type "xsd:boolean"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/fileKeyword.ttl b/NTO/Healthcare/attributes/fileKeyword.ttl new file mode 100644 index 0000000000..1f931255c5 --- /dev/null +++ b/NTO/Healthcare/attributes/fileKeyword.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:fileKeyword + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "fileKeyword"; + dcterms:description "Therapy keyword / short label (pf_therapy.file_keyword)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_therapy.file_keyword"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/fileLd.ttl b/NTO/Healthcare/attributes/fileLd.ttl new file mode 100644 index 0000000000..f8a5fc2ea2 --- /dev/null +++ b/NTO/Healthcare/attributes/fileLd.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:fileLd + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "fileLd"; + dcterms:description "Leading-diagnosis flag (pf_diagnosis.file_ld)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_diagnosis.file_ld"; + ogit:type "xsd:boolean"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/fileMedicineDose.ttl b/NTO/Healthcare/attributes/fileMedicineDose.ttl new file mode 100644 index 0000000000..d44a17ec9e --- /dev/null +++ b/NTO/Healthcare/attributes/fileMedicineDose.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:fileMedicineDose + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "fileMedicineDose"; + dcterms:description "Numeric per-administration dose (pat_medication.file_medicine_dose)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.file_medicine_dose"; + ogit:type "xsd:float"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/fileMedicineName.ttl b/NTO/Healthcare/attributes/fileMedicineName.ttl new file mode 100644 index 0000000000..fc2b312002 --- /dev/null +++ b/NTO/Healthcare/attributes/fileMedicineName.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:fileMedicineName + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "fileMedicineName"; + dcterms:description "Trade / display name of the medicine (pat_medication.file_medicine_name)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.file_medicine_name"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/fileMedicineTyp.ttl b/NTO/Healthcare/attributes/fileMedicineTyp.ttl new file mode 100644 index 0000000000..fddf5937e6 --- /dev/null +++ b/NTO/Healthcare/attributes/fileMedicineTyp.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:fileMedicineTyp + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "fileMedicineTyp"; + dcterms:description "Medicine type FK -> combo_medication_typ.id (pat_medication.file_medicine_typ)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.file_medicine_typ"; + ogit:type "xsd:integer"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/fileNotice.ttl b/NTO/Healthcare/attributes/fileNotice.ttl new file mode 100644 index 0000000000..18debb06d9 --- /dev/null +++ b/NTO/Healthcare/attributes/fileNotice.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:fileNotice + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "fileNotice"; + dcterms:description "Free-text notice attached to the prescription (pat_medication.file_notice)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.file_notice"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/filePraepId.ttl b/NTO/Healthcare/attributes/filePraepId.ttl new file mode 100644 index 0000000000..dae56d197f --- /dev/null +++ b/NTO/Healthcare/attributes/filePraepId.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:filePraepId + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "filePraepId"; + dcterms:description "Drug-product identifier in the medicines master (pat_medication.file_praepid)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.file_praepid"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/fileStart.ttl b/NTO/Healthcare/attributes/fileStart.ttl new file mode 100644 index 0000000000..0fadca133f --- /dev/null +++ b/NTO/Healthcare/attributes/fileStart.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:fileStart + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "fileStart"; + dcterms:description "Treatment start date (pat_medication.file_start)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.file_start"; + ogit:type "xsd:dateTime"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/fileStop.ttl b/NTO/Healthcare/attributes/fileStop.ttl new file mode 100644 index 0000000000..de1bfafabb --- /dev/null +++ b/NTO/Healthcare/attributes/fileStop.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:fileStop + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "fileStop"; + dcterms:description "Treatment stop date (pat_medication.file_stop)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.file_stop"; + ogit:type "xsd:dateTime"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/fileText.ttl b/NTO/Healthcare/attributes/fileText.ttl new file mode 100644 index 0000000000..89b483cb45 --- /dev/null +++ b/NTO/Healthcare/attributes/fileText.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:fileText + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "fileText"; + dcterms:description "Free-text clinical description (pf_diagnosis.file_Text)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_diagnosis.file_Text"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/findingSummary.ttl b/NTO/Healthcare/attributes/findingSummary.ttl new file mode 100644 index 0000000000..a082f606e9 --- /dev/null +++ b/NTO/Healthcare/attributes/findingSummary.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:findingSummary + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "findingSummary"; + dcterms:description "Free-text or coded summary of the assessment's finding. Structured per-site findings are cascade-path nodes part_of the assessment, not a codebook slot."; + dcterms:source "SNOMED-CT:404684003"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/firstname.ttl b/NTO/Healthcare/attributes/firstname.ttl new file mode 100644 index 0000000000..050d64f5db --- /dev/null +++ b/NTO/Healthcare/attributes/firstname.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:firstname + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "firstname"; + dcterms:description "Patient given name (praxis_patient.p_firstname)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_firstname"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/labId.ttl b/NTO/Healthcare/attributes/labId.ttl new file mode 100644 index 0000000000..30255bd911 --- /dev/null +++ b/NTO/Healthcare/attributes/labId.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:labId + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "labId"; + dcterms:description "Laboratory FK / partner identifier (pf_laboratory_values.labid)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_laboratory_values.labid"; + ogit:type "xsd:integer"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/lastname.ttl b/NTO/Healthcare/attributes/lastname.ttl new file mode 100644 index 0000000000..6f1bbc7f9b --- /dev/null +++ b/NTO/Healthcare/attributes/lastname.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:lastname + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "lastname"; + dcterms:description "Patient family name (praxis_patient.p_lastname)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_lastname"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/loginAt.ttl b/NTO/Healthcare/attributes/loginAt.ttl new file mode 100644 index 0000000000..989f3fdaa2 --- /dev/null +++ b/NTO/Healthcare/attributes/loginAt.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:loginAt + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "loginAt"; + dcterms:description "Patient login time into waiting room (praxis_patient_waitingroom.p_login)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient_waitingroom.p_login"; + ogit:type "xsd:dateTime"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/logoutAt.ttl b/NTO/Healthcare/attributes/logoutAt.ttl new file mode 100644 index 0000000000..3691b40b56 --- /dev/null +++ b/NTO/Healthcare/attributes/logoutAt.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:logoutAt + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "logoutAt"; + dcterms:description "Patient logout / visit-end time (praxis_patient_waitingroom.p_logout)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient_waitingroom.p_logout"; + ogit:type "xsd:dateTime"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/loincId.ttl b/NTO/Healthcare/attributes/loincId.ttl new file mode 100644 index 0000000000..fcb4cf044c --- /dev/null +++ b/NTO/Healthcare/attributes/loincId.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:loincId + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "loincId"; + dcterms:description "LOINC reference code identifier (pf_laboratory_values.loincid)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_laboratory_values.loincid"; + ogit:type "xsd:integer"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/loincRef.ttl b/NTO/Healthcare/attributes/loincRef.ttl new file mode 100644 index 0000000000..924af7a471 --- /dev/null +++ b/NTO/Healthcare/attributes/loincRef.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:loincRef + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "loincRef"; + dcterms:description "Out-of-namespace reference to LOINC concept. Carried as a property reference rather than an in-namespace entity since LOINC is governed externally."; + dcterms:source "loinc:"; + ogit:type "xsd:anyURI"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/mail.ttl b/NTO/Healthcare/attributes/mail.ttl new file mode 100644 index 0000000000..3d52b82a2a --- /dev/null +++ b/NTO/Healthcare/attributes/mail.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:mail + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "mail"; + dcterms:description "Patient email (praxis_patient.p_mail)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_mail"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/medicationDailyDose.ttl b/NTO/Healthcare/attributes/medicationDailyDose.ttl new file mode 100644 index 0000000000..4e48432e99 --- /dev/null +++ b/NTO/Healthcare/attributes/medicationDailyDose.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:medicationDailyDose + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "medicationDailyDose"; + dcterms:description "Daily-dose FK -> combo_medication_dailydose.id (pat_medication.pf_medication_dailydose)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.pf_medication_dailydose"; + ogit:type "xsd:integer"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/medicationDoseUnit.ttl b/NTO/Healthcare/attributes/medicationDoseUnit.ttl new file mode 100644 index 0000000000..8df7c3d3a6 --- /dev/null +++ b/NTO/Healthcare/attributes/medicationDoseUnit.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:medicationDoseUnit + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "medicationDoseUnit"; + dcterms:description "Dose-unit FK -> combo_medication_dose_unit.id (pat_medication.pf_medication_dose_unit)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.pf_medication_dose_unit"; + ogit:type "xsd:integer"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/medicationInterval.ttl b/NTO/Healthcare/attributes/medicationInterval.ttl new file mode 100644 index 0000000000..451478113f --- /dev/null +++ b/NTO/Healthcare/attributes/medicationInterval.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:medicationInterval + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "medicationInterval"; + dcterms:description "Interval-of-administration FK -> combo_medication_interval.id (pat_medication.pf_medication_interval)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.pf_medication_interval"; + ogit:type "xsd:integer"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/medicationStopReason.ttl b/NTO/Healthcare/attributes/medicationStopReason.ttl new file mode 100644 index 0000000000..662771fe1f --- /dev/null +++ b/NTO/Healthcare/attributes/medicationStopReason.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:medicationStopReason + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "medicationStopReason"; + dcterms:description "Stop-reason FK -> combo_medication_stop_reason.id (pat_medication.pf_medication_stop_reason)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.pf_medication_stop_reason"; + ogit:type "xsd:integer"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/mobil.ttl b/NTO/Healthcare/attributes/mobil.ttl new file mode 100644 index 0000000000..01ed0b99d3 --- /dev/null +++ b/NTO/Healthcare/attributes/mobil.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:mobil + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "mobil"; + dcterms:description "Patient mobile phone (praxis_patient.p_mobil)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_mobil"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/noticeForDoc.ttl b/NTO/Healthcare/attributes/noticeForDoc.ttl new file mode 100644 index 0000000000..0697a4cacb --- /dev/null +++ b/NTO/Healthcare/attributes/noticeForDoc.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:noticeForDoc + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "noticeForDoc"; + dcterms:description "Free-text reception notice for the doctor (praxis_patient_waitingroom.p_notice_for_doc)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient_waitingroom.p_notice_for_doc"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/performedAt.ttl b/NTO/Healthcare/attributes/performedAt.ttl new file mode 100644 index 0000000000..f41584be3c --- /dev/null +++ b/NTO/Healthcare/attributes/performedAt.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:performedAt + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "performedAt"; + dcterms:description "Timestamp at which the assessment was performed."; + dcterms:source "SNOMED-CT:386053000"; + ogit:type "xsd:dateTime"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/place.ttl b/NTO/Healthcare/attributes/place.ttl new file mode 100644 index 0000000000..956f36c9e9 --- /dev/null +++ b/NTO/Healthcare/attributes/place.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:place + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "place"; + dcterms:description "City / place of residence (praxis_patient.p_place)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_place"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/priority.ttl b/NTO/Healthcare/attributes/priority.ttl new file mode 100644 index 0000000000..b3392fd8d5 --- /dev/null +++ b/NTO/Healthcare/attributes/priority.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:priority + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "priority"; + dcterms:description "Visit triage priority (praxis_patient_waitingroom.p_priority)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient_waitingroom.p_priority"; + ogit:type "xsd:integer"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/pulse.ttl b/NTO/Healthcare/attributes/pulse.ttl new file mode 100644 index 0000000000..9e46ec1903 --- /dev/null +++ b/NTO/Healthcare/attributes/pulse.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:pulse + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "pulse"; + dcterms:description "Pulse rate (bpm) (pf_vital_bloodpressure.pulse)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_vital_bloodpressure.pulse"; + ogit:type "xsd:float"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/sexd.ttl b/NTO/Healthcare/attributes/sexd.ttl new file mode 100644 index 0000000000..6fc20bc2b7 --- /dev/null +++ b/NTO/Healthcare/attributes/sexd.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:sexd + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "sexd"; + dcterms:description "Boolean: patient identifies as diverse (praxis_patient.p_sexd)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_sexd"; + ogit:type "xsd:boolean"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/sexf.ttl b/NTO/Healthcare/attributes/sexf.ttl new file mode 100644 index 0000000000..4daae3da27 --- /dev/null +++ b/NTO/Healthcare/attributes/sexf.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:sexf + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "sexf"; + dcterms:description "Boolean: patient identifies as female (praxis_patient.p_sexf)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_sexf"; + ogit:type "xsd:boolean"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/sexm.ttl b/NTO/Healthcare/attributes/sexm.ttl new file mode 100644 index 0000000000..2235b16dba --- /dev/null +++ b/NTO/Healthcare/attributes/sexm.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:sexm + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "sexm"; + dcterms:description "Boolean: patient identifies as male (praxis_patient.p_sexm)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_sexm"; + ogit:type "xsd:boolean"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/spez.ttl b/NTO/Healthcare/attributes/spez.ttl new file mode 100644 index 0000000000..3c1ea318c1 --- /dev/null +++ b/NTO/Healthcare/attributes/spez.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:spez + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "spez"; + dcterms:description "Specialty / profile assigned to the patient (praxis_patient.p_spez)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_spez"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/street.ttl b/NTO/Healthcare/attributes/street.ttl new file mode 100644 index 0000000000..ce5619d42c --- /dev/null +++ b/NTO/Healthcare/attributes/street.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:street + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "street"; + dcterms:description "Street address (praxis_patient.p_street)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_street"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/timeInWaiting.ttl b/NTO/Healthcare/attributes/timeInWaiting.ttl new file mode 100644 index 0000000000..ea71d5163e --- /dev/null +++ b/NTO/Healthcare/attributes/timeInWaiting.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:timeInWaiting + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "timeInWaiting"; + dcterms:description "Computed waiting duration in minutes (praxis_patient_waitingroom.p_time_in_waiting)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient_waitingroom.p_time_in_waiting"; + ogit:type "xsd:integer"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/title1.ttl b/NTO/Healthcare/attributes/title1.ttl new file mode 100644 index 0000000000..3441dcef8d --- /dev/null +++ b/NTO/Healthcare/attributes/title1.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:title1 + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "title1"; + dcterms:description "Honorific title (praxis_patient.p_title1)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_title1"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/title2.ttl b/NTO/Healthcare/attributes/title2.ttl new file mode 100644 index 0000000000..a206b20b05 --- /dev/null +++ b/NTO/Healthcare/attributes/title2.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:title2 + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "title2"; + dcterms:description "Academic title (praxis_patient.p_title2)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_title2"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/toDocId.ttl b/NTO/Healthcare/attributes/toDocId.ttl new file mode 100644 index 0000000000..a8d304ad2c --- /dev/null +++ b/NTO/Healthcare/attributes/toDocId.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:toDocId + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "toDocId"; + dcterms:description "Doctor assigned to handle the visit (praxis_patient_waitingroom.p_to_doc_id)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient_waitingroom.p_to_doc_id"; + ogit:type "xsd:integer"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/waitingroomId.ttl b/NTO/Healthcare/attributes/waitingroomId.ttl new file mode 100644 index 0000000000..50293cfa04 --- /dev/null +++ b/NTO/Healthcare/attributes/waitingroomId.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:waitingroomId + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "waitingroomId"; + dcterms:description "FK to praxis_waitingroom (praxis_patient_waitingroom.praxis_waitingroomid)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient_waitingroom.praxis_waitingroomid"; + ogit:type "xsd:integer"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/werte.ttl b/NTO/Healthcare/attributes/werte.ttl new file mode 100644 index 0000000000..7e453ef0b2 --- /dev/null +++ b/NTO/Healthcare/attributes/werte.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:werte + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "werte"; + dcterms:description "Numeric measured value (pf_laboratory_values.werte)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_laboratory_values.werte"; + ogit:type "xsd:float"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/attributes/zip.ttl b/NTO/Healthcare/attributes/zip.ttl new file mode 100644 index 0000000000..10ce6b157c --- /dev/null +++ b/NTO/Healthcare/attributes/zip.ttl @@ -0,0 +1,16 @@ +@prefix ogit.Healthcare: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:zip + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "zip"; + dcterms:description "Postal code (praxis_patient.p_zip)."; + dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_zip"; + ogit:type "xsd:string"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/Healthcare/entities/AnatomicalStructure.ttl b/NTO/Healthcare/entities/AnatomicalStructure.ttl new file mode 100644 index 0000000000..c530dcf1e0 --- /dev/null +++ b/NTO/Healthcare/entities/AnatomicalStructure.ttl @@ -0,0 +1,26 @@ +@prefix ogit: . +@prefix ogit.Healthcare: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:AnatomicalStructure + a rdfs:Class; + rdfs:subClassOf ogit:Entity; + rdfs:label "AnatomicalStructure"; + dcterms:valid "start=2026-10-10;"; + dcterms:description "A part of the body that an assessment evaluates, such as an organ or a joint. Identified by an external anatomy reference."; + dcterms:creator "claude-ogit-bootstrap"; + ogit:scope "NTO"; + ogit:parent ogit:Node; + ogit:mandatory-attributes ( + ogit:id + ogit:name + ); + ogit:optional-attributes ( + ); + ogit:indexed-attributes ( + ogit:name + ); + ogit:allowed ( + ); +. diff --git a/NTO/Healthcare/entities/Assessment.ttl b/NTO/Healthcare/entities/Assessment.ttl index 28dcdbc7c4..03343313ff 100644 --- a/NTO/Healthcare/entities/Assessment.ttl +++ b/NTO/Healthcare/entities/Assessment.ttl @@ -19,6 +19,7 @@ ogit.Healthcare:Assessment a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "Assessment"; + dcterms:valid "start=2026-10-10;"; dcterms:description "A diagnostic evaluation act that produces findings about an anatomical structure. Modality-agnostic root: an assessment is performed by some modality (its is_a subclass) and evaluates some anatomical structure (its part_of grounding)."; dcterms:source "SNOMED-CT:386053000"; dcterms:creator "claude-ogit-bootstrap"; @@ -35,67 +36,7 @@ ogit.Healthcare:Assessment ogit.Healthcare:performedAt ); ogit:allowed ( - [ ogit:assesses ogit.Healthcare:AnatomicalStructure ] + [ ogit.Healthcare:assesses ogit.Healthcare:AnatomicalStructure ] [ ogit:belongs ogit.Healthcare:Patient ] ); . - -# ── is_a rail — the modality taxonomy (each modality is-a Assessment) ── - -ogit.Healthcare:SonographicAssessment - a rdfs:Class; - rdfs:subClassOf ogit.Healthcare:Assessment; - rdfs:label "SonographicAssessment"; - dcterms:description "An assessment performed by ultrasound (sonography). Reusable across any sonographic examination; the assessed structure is fixed by the part_of grounding (e.g. a joint, an abdomen), never by the modality."; - dcterms:source "SNOMED-CT:16310003"; - dcterms:creator "claude-ogit-bootstrap"; - ogit:scope "NTO"; - ogit:parent ogit.Healthcare:Assessment; - ogit:allowed ( - [ ogit:assesses ogit.Healthcare:AnatomicalStructure ] - ); -. - -ogit.Healthcare:MriAssessment - a rdfs:Class; - rdfs:subClassOf ogit.Healthcare:Assessment; - rdfs:label "MriAssessment"; - dcterms:description "An assessment performed by magnetic-resonance imaging. Same reusable shape as SonographicAssessment — a different modality over the identical anatomy grounding."; - dcterms:source "SNOMED-CT:113091000"; - dcterms:creator "claude-ogit-bootstrap"; - ogit:scope "NTO"; - ogit:parent ogit.Healthcare:Assessment; - ogit:allowed ( - [ ogit:assesses ogit.Healthcare:AnatomicalStructure ] - ); -. - -ogit.Healthcare:HistologicAssessment - a rdfs:Class; - rdfs:subClassOf ogit.Healthcare:Assessment; - rdfs:label "HistologicAssessment"; - dcterms:description "An assessment performed by histopathological examination of tissue. The third modality sibling; reuses the Assessment root and the anatomy grounding at zero additional shape cost."; - dcterms:source "SNOMED-CT:250537006"; - dcterms:creator "claude-ogit-bootstrap"; - ogit:scope "NTO"; - ogit:parent ogit.Healthcare:Assessment; - ogit:allowed ( - [ ogit:assesses ogit.Healthcare:AnatomicalStructure ] - ); -. - -# ── shared agnostic properties ── - -ogit.Healthcare:performedAt - a ogit:Property; - rdfs:label "performedAt"; - dcterms:description "Timestamp at which the assessment was performed."; - dcterms:source "SNOMED-CT:386053000"; - ogit:type "xsd:dateTime" . - -ogit.Healthcare:findingSummary - a ogit:Property; - rdfs:label "findingSummary"; - dcterms:description "Free-text or coded summary of the assessment's finding. Structured per-site findings are cascade-path nodes part_of the assessment, not a codebook slot."; - dcterms:source "SNOMED-CT:404684003"; - ogit:type "xsd:string" . diff --git a/NTO/Healthcare/entities/Diagnosis.ttl b/NTO/Healthcare/entities/Diagnosis.ttl index 3186549174..c442adfc79 100644 --- a/NTO/Healthcare/entities/Diagnosis.ttl +++ b/NTO/Healthcare/entities/Diagnosis.ttl @@ -9,6 +9,7 @@ ogit.Healthcare:Diagnosis a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "Diagnosis"; + dcterms:valid "start=2026-10-10;"; dcterms:description "A clinical diagnosis attached to a patient (and optionally a visit). Carries ICD code, free-text diagnosis description, leading-diagnosis and chronic flags. Source-of-truth: pf_diagnosis (17 cols)."; dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_diagnosis"; dcterms:creator "claude-ogit-bootstrap"; @@ -37,59 +38,3 @@ ogit.Healthcare:Diagnosis [ ogit:relates ogit.Healthcare:Visit ] ); . - -ogit.Healthcare:fileIcd - a ogit:Property; - rdfs:label "fileIcd"; - dcterms:description "ICD-10 code for the diagnosis (pf_diagnosis.file_icd)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_diagnosis.file_icd"; - ogit:type "xsd:string" . - -ogit.Healthcare:fileDiag - a ogit:Property; - rdfs:label "fileDiag"; - dcterms:description "Short diagnosis label (pf_diagnosis.file_diag)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_diagnosis.file_diag"; - ogit:type "xsd:string" . - -ogit.Healthcare:fileText - a ogit:Property; - rdfs:label "fileText"; - dcterms:description "Free-text clinical description (pf_diagnosis.file_Text)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_diagnosis.file_Text"; - ogit:type "xsd:string" . - -ogit.Healthcare:createDate - a ogit:Property; - rdfs:label "createDate"; - dcterms:description "Entry creation timestamp (pf_diagnosis.d_createdate)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_diagnosis.d_createdate"; - ogit:type "xsd:dateTime" . - -ogit.Healthcare:dbSpezId - a ogit:Property; - rdfs:label "dbSpezId"; - dcterms:description "Specialty FK -> combo_spez.id (pf_diagnosis.db_spezid)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_diagnosis.db_spezid"; - ogit:type "xsd:integer" . - -ogit.Healthcare:fileLd - a ogit:Property; - rdfs:label "fileLd"; - dcterms:description "Leading-diagnosis flag (pf_diagnosis.file_ld)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_diagnosis.file_ld"; - ogit:type "xsd:boolean" . - -ogit.Healthcare:fileKd - a ogit:Property; - rdfs:label "fileKd"; - dcterms:description "Chronic-diagnosis flag (pf_diagnosis.file_kd)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_diagnosis.file_kd"; - ogit:type "xsd:boolean" . - -ogit.Healthcare:fileDate - a ogit:Property; - rdfs:label "fileDate"; - dcterms:description "Clinical event date the diagnosis refers to (pf_diagnosis.file_date)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_diagnosis.file_date"; - ogit:type "xsd:dateTime" . diff --git a/NTO/Healthcare/entities/HistologicAssessment.ttl b/NTO/Healthcare/entities/HistologicAssessment.ttl new file mode 100644 index 0000000000..20ed42a2d0 --- /dev/null +++ b/NTO/Healthcare/entities/HistologicAssessment.ttl @@ -0,0 +1,20 @@ +@prefix ogit: . +@prefix ogit.Healthcare: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . +@prefix xsd: . + +ogit.Healthcare:HistologicAssessment + a rdfs:Class; + rdfs:subClassOf ogit.Healthcare:Assessment; + rdfs:label "HistologicAssessment"; + dcterms:description "An assessment performed by histopathological examination of tissue. The third modality sibling; reuses the Assessment root and the anatomy grounding at zero additional shape cost."; + dcterms:source "SNOMED-CT:250537006"; + dcterms:creator "claude-ogit-bootstrap"; + ogit:scope "NTO"; + ogit:parent ogit.Healthcare:Assessment; + ogit:allowed ( + [ ogit.Healthcare:assesses ogit.Healthcare:AnatomicalStructure ] + ); +. diff --git a/NTO/Healthcare/entities/LabValue.ttl b/NTO/Healthcare/entities/LabValue.ttl index d2e2cc63bb..5b004f6abb 100644 --- a/NTO/Healthcare/entities/LabValue.ttl +++ b/NTO/Healthcare/entities/LabValue.ttl @@ -9,6 +9,7 @@ ogit.Healthcare:LabValue a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "LabValue"; + dcterms:valid "start=2026-10-10;"; dcterms:description "A laboratory measurement for a patient. LOINC-coded test (loincid) with a numeric value (werte) and lab-internal id. Source-of-truth: pf_laboratory_values (9 cols)."; dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_laboratory_values"; dcterms:creator "claude-ogit-bootstrap"; @@ -22,6 +23,7 @@ ogit.Healthcare:LabValue ogit.Healthcare:labId ogit.Healthcare:loincId ogit.Healthcare:werte + ogit.Healthcare:loincRef ); ogit:indexed-attributes ( ogit.Healthcare:createDate @@ -29,34 +31,5 @@ ogit.Healthcare:LabValue ); ogit:allowed ( [ ogit:belongs ogit.Healthcare:Patient ] - [ ogit:relates ogit.Healthcare:loincRef ] ); . - -ogit.Healthcare:labId - a ogit:Property; - rdfs:label "labId"; - dcterms:description "Laboratory FK / partner identifier (pf_laboratory_values.labid)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_laboratory_values.labid"; - ogit:type "xsd:integer" . - -ogit.Healthcare:loincId - a ogit:Property; - rdfs:label "loincId"; - dcterms:description "LOINC reference code identifier (pf_laboratory_values.loincid)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_laboratory_values.loincid"; - ogit:type "xsd:integer" . - -ogit.Healthcare:werte - a ogit:Property; - rdfs:label "werte"; - dcterms:description "Numeric measured value (pf_laboratory_values.werte)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_laboratory_values.werte"; - ogit:type "xsd:float" . - -ogit.Healthcare:loincRef - a ogit:Property; - rdfs:label "loincRef"; - dcterms:description "Out-of-namespace reference to LOINC concept. Carried as a property reference rather than an in-namespace entity since LOINC is governed externally."; - dcterms:source "loinc:"; - ogit:type "xsd:anyURI" . diff --git a/NTO/Healthcare/entities/Medication.ttl b/NTO/Healthcare/entities/Medication.ttl index f27b605fc7..e7cf0e8e61 100644 --- a/NTO/Healthcare/entities/Medication.ttl +++ b/NTO/Healthcare/entities/Medication.ttl @@ -9,6 +9,7 @@ ogit.Healthcare:Medication a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "Medication"; + dcterms:valid "start=2026-10-10;"; dcterms:description "A prescribed / dispensed medication for a patient. Carries product id, dose, interval, daily dose, dose unit, stop reason, start/stop dates. Source-of-truth: pat_medication (25 cols)."; dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication"; dcterms:creator "claude-ogit-bootstrap"; @@ -45,80 +46,3 @@ ogit.Healthcare:Medication [ ogit:relates ogit.Healthcare:combo_medication_stop_reason ] ); . - -ogit.Healthcare:filePraepId - a ogit:Property; - rdfs:label "filePraepId"; - dcterms:description "Drug-product identifier in the medicines master (pat_medication.file_praepid)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.file_praepid"; - ogit:type "xsd:string" . - -ogit.Healthcare:fileMedicineName - a ogit:Property; - rdfs:label "fileMedicineName"; - dcterms:description "Trade / display name of the medicine (pat_medication.file_medicine_name)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.file_medicine_name"; - ogit:type "xsd:string" . - -ogit.Healthcare:fileMedicineDose - a ogit:Property; - rdfs:label "fileMedicineDose"; - dcterms:description "Numeric per-administration dose (pat_medication.file_medicine_dose)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.file_medicine_dose"; - ogit:type "xsd:float" . - -ogit.Healthcare:fileMedicineTyp - a ogit:Property; - rdfs:label "fileMedicineTyp"; - dcterms:description "Medicine type FK -> combo_medication_typ.id (pat_medication.file_medicine_typ)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.file_medicine_typ"; - ogit:type "xsd:integer" . - -ogit.Healthcare:fileStart - a ogit:Property; - rdfs:label "fileStart"; - dcterms:description "Treatment start date (pat_medication.file_start)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.file_start"; - ogit:type "xsd:dateTime" . - -ogit.Healthcare:fileStop - a ogit:Property; - rdfs:label "fileStop"; - dcterms:description "Treatment stop date (pat_medication.file_stop)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.file_stop"; - ogit:type "xsd:dateTime" . - -ogit.Healthcare:fileNotice - a ogit:Property; - rdfs:label "fileNotice"; - dcterms:description "Free-text notice attached to the prescription (pat_medication.file_notice)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.file_notice"; - ogit:type "xsd:string" . - -ogit.Healthcare:medicationInterval - a ogit:Property; - rdfs:label "medicationInterval"; - dcterms:description "Interval-of-administration FK -> combo_medication_interval.id (pat_medication.pf_medication_interval)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.pf_medication_interval"; - ogit:type "xsd:integer" . - -ogit.Healthcare:medicationDailyDose - a ogit:Property; - rdfs:label "medicationDailyDose"; - dcterms:description "Daily-dose FK -> combo_medication_dailydose.id (pat_medication.pf_medication_dailydose)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.pf_medication_dailydose"; - ogit:type "xsd:integer" . - -ogit.Healthcare:medicationStopReason - a ogit:Property; - rdfs:label "medicationStopReason"; - dcterms:description "Stop-reason FK -> combo_medication_stop_reason.id (pat_medication.pf_medication_stop_reason)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.pf_medication_stop_reason"; - ogit:type "xsd:integer" . - -ogit.Healthcare:medicationDoseUnit - a ogit:Property; - rdfs:label "medicationDoseUnit"; - dcterms:description "Dose-unit FK -> combo_medication_dose_unit.id (pat_medication.pf_medication_dose_unit)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pat_medication.pf_medication_dose_unit"; - ogit:type "xsd:integer" . diff --git a/NTO/Healthcare/entities/MriAssessment.ttl b/NTO/Healthcare/entities/MriAssessment.ttl new file mode 100644 index 0000000000..cf3bfc719d --- /dev/null +++ b/NTO/Healthcare/entities/MriAssessment.ttl @@ -0,0 +1,20 @@ +@prefix ogit: . +@prefix ogit.Healthcare: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . +@prefix xsd: . + +ogit.Healthcare:MriAssessment + a rdfs:Class; + rdfs:subClassOf ogit.Healthcare:Assessment; + rdfs:label "MriAssessment"; + dcterms:description "An assessment performed by magnetic-resonance imaging. Same reusable shape as SonographicAssessment — a different modality over the identical anatomy grounding."; + dcterms:source "SNOMED-CT:113091000"; + dcterms:creator "claude-ogit-bootstrap"; + ogit:scope "NTO"; + ogit:parent ogit.Healthcare:Assessment; + ogit:allowed ( + [ ogit.Healthcare:assesses ogit.Healthcare:AnatomicalStructure ] + ); +. diff --git a/NTO/Healthcare/entities/Patient.ttl b/NTO/Healthcare/entities/Patient.ttl index 93d94b6ed8..1c0d678dbe 100644 --- a/NTO/Healthcare/entities/Patient.ttl +++ b/NTO/Healthcare/entities/Patient.ttl @@ -9,6 +9,7 @@ ogit.Healthcare:Patient a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "Patient"; + dcterms:valid "start=2026-10-10;"; dcterms:description "A patient record in a clinical practice. Identified by an internal id, scoped to a tenant (clinic), with demographic, contact, and specialty fields. Source-of-truth: praxis_patient (30 cols)."; dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient"; dcterms:creator "claude-ogit-bootstrap"; @@ -35,6 +36,7 @@ ogit.Healthcare:Patient ogit.Healthcare:title1 ogit.Healthcare:title2 ogit.Healthcare:anomize + ogit:tenantId ); ogit:indexed-attributes ( ogit.Healthcare:lastname @@ -42,125 +44,5 @@ ogit.Healthcare:Patient ogit.Healthcare:mail ); ogit:allowed ( - [ ogit:belongs ogit:Tenant ] ); . - -ogit.Healthcare:firstname - a ogit:Property; - rdfs:label "firstname"; - dcterms:description "Patient given name (praxis_patient.p_firstname)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_firstname"; - ogit:type "xsd:string" . - -ogit.Healthcare:lastname - a ogit:Property; - rdfs:label "lastname"; - dcterms:description "Patient family name (praxis_patient.p_lastname)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_lastname"; - ogit:type "xsd:string" . - -ogit.Healthcare:birth - a ogit:Property; - rdfs:label "birth"; - dcterms:description "Patient date of birth (praxis_patient.p_birth)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_birth"; - ogit:type "xsd:dateTime" . - -ogit.Healthcare:sexm - a ogit:Property; - rdfs:label "sexm"; - dcterms:description "Boolean: patient identifies as male (praxis_patient.p_sexm)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_sexm"; - ogit:type "xsd:boolean" . - -ogit.Healthcare:sexf - a ogit:Property; - rdfs:label "sexf"; - dcterms:description "Boolean: patient identifies as female (praxis_patient.p_sexf)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_sexf"; - ogit:type "xsd:boolean" . - -ogit.Healthcare:sexd - a ogit:Property; - rdfs:label "sexd"; - dcterms:description "Boolean: patient identifies as diverse (praxis_patient.p_sexd)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_sexd"; - ogit:type "xsd:boolean" . - -ogit.Healthcare:ethnic - a ogit:Property; - rdfs:label "ethnic"; - dcterms:description "Self-declared ethnicity (praxis_patient.p_ethnic)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_ethnic"; - ogit:type "xsd:string" . - -ogit.Healthcare:mail - a ogit:Property; - rdfs:label "mail"; - dcterms:description "Patient email (praxis_patient.p_mail)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_mail"; - ogit:type "xsd:string" . - -ogit.Healthcare:mobil - a ogit:Property; - rdfs:label "mobil"; - dcterms:description "Patient mobile phone (praxis_patient.p_mobil)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_mobil"; - ogit:type "xsd:string" . - -ogit.Healthcare:country - a ogit:Property; - rdfs:label "country"; - dcterms:description "Patient country (praxis_patient.p_country)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_country"; - ogit:type "xsd:string" . - -ogit.Healthcare:zip - a ogit:Property; - rdfs:label "zip"; - dcterms:description "Postal code (praxis_patient.p_zip)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_zip"; - ogit:type "xsd:string" . - -ogit.Healthcare:place - a ogit:Property; - rdfs:label "place"; - dcterms:description "City / place of residence (praxis_patient.p_place)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_place"; - ogit:type "xsd:string" . - -ogit.Healthcare:street - a ogit:Property; - rdfs:label "street"; - dcterms:description "Street address (praxis_patient.p_street)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_street"; - ogit:type "xsd:string" . - -ogit.Healthcare:spez - a ogit:Property; - rdfs:label "spez"; - dcterms:description "Specialty / profile assigned to the patient (praxis_patient.p_spez)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_spez"; - ogit:type "xsd:string" . - -ogit.Healthcare:title1 - a ogit:Property; - rdfs:label "title1"; - dcterms:description "Honorific title (praxis_patient.p_title1)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_title1"; - ogit:type "xsd:string" . - -ogit.Healthcare:title2 - a ogit:Property; - rdfs:label "title2"; - dcterms:description "Academic title (praxis_patient.p_title2)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_title2"; - ogit:type "xsd:string" . - -ogit.Healthcare:anomize - a ogit:Property; - rdfs:label "anomize"; - dcterms:description "Anonymisation flag for research export (praxis_patient.p_anomize)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient.p_anomize"; - ogit:type "xsd:boolean" . diff --git a/NTO/Healthcare/entities/SonographicAssessment.ttl b/NTO/Healthcare/entities/SonographicAssessment.ttl new file mode 100644 index 0000000000..7b527fbaa5 --- /dev/null +++ b/NTO/Healthcare/entities/SonographicAssessment.ttl @@ -0,0 +1,20 @@ +@prefix ogit: . +@prefix ogit.Healthcare: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . +@prefix xsd: . + +ogit.Healthcare:SonographicAssessment + a rdfs:Class; + rdfs:subClassOf ogit.Healthcare:Assessment; + rdfs:label "SonographicAssessment"; + dcterms:description "An assessment performed by ultrasound (sonography). Reusable across any sonographic examination; the assessed structure is fixed by the part_of grounding (e.g. a joint, an abdomen), never by the modality."; + dcterms:source "SNOMED-CT:16310003"; + dcterms:creator "claude-ogit-bootstrap"; + ogit:scope "NTO"; + ogit:parent ogit.Healthcare:Assessment; + ogit:allowed ( + [ ogit.Healthcare:assesses ogit.Healthcare:AnatomicalStructure ] + ); +. diff --git a/NTO/Healthcare/entities/Treatment.ttl b/NTO/Healthcare/entities/Treatment.ttl index 2379c82542..53db322d4a 100644 --- a/NTO/Healthcare/entities/Treatment.ttl +++ b/NTO/Healthcare/entities/Treatment.ttl @@ -9,6 +9,7 @@ ogit.Healthcare:Treatment a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "Treatment"; + dcterms:valid "start=2026-10-10;"; dcterms:description "A therapy / treatment record attached to a patient. Free-text-driven (keyword + Text), provenance-aware (db_sourcedb). Source-of-truth: pf_therapy (16 cols)."; dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_therapy"; dcterms:creator "claude-ogit-bootstrap"; @@ -34,24 +35,3 @@ ogit.Healthcare:Treatment [ ogit:belongs ogit.Healthcare:Patient ] ); . - -ogit.Healthcare:fileKeyword - a ogit:Property; - rdfs:label "fileKeyword"; - dcterms:description "Therapy keyword / short label (pf_therapy.file_keyword)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_therapy.file_keyword"; - ogit:type "xsd:string" . - -ogit.Healthcare:dbSourceDb - a ogit:Property; - rdfs:label "dbSourceDb"; - dcterms:description "Provenance: name of the source database the row was imported from (pf_therapy.db_sourcedb)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_therapy.db_sourcedb"; - ogit:type "xsd:string" . - -ogit.Healthcare:dbSourceId - a ogit:Property; - rdfs:label "dbSourceId"; - dcterms:description "Provenance: row id in the source database (pf_therapy.db_sourceid)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_therapy.db_sourceid"; - ogit:type "xsd:integer" . diff --git a/NTO/Healthcare/entities/Visit.ttl b/NTO/Healthcare/entities/Visit.ttl index acb5afaa6d..23403efdd5 100644 --- a/NTO/Healthcare/entities/Visit.ttl +++ b/NTO/Healthcare/entities/Visit.ttl @@ -9,6 +9,7 @@ ogit.Healthcare:Visit a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "Visit"; + dcterms:valid "start=2026-10-10;"; dcterms:description "A patient visit / waiting-room session — login, doctor assignment, priority, time-in-waiting and logout. Source-of-truth: praxis_patient_waitingroom."; dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient_waitingroom"; dcterms:creator "claude-ogit-bootstrap"; @@ -35,52 +36,3 @@ ogit.Healthcare:Visit [ ogit:belongs ogit.Healthcare:Patient ] ); . - -ogit.Healthcare:waitingroomId - a ogit:Property; - rdfs:label "waitingroomId"; - dcterms:description "FK to praxis_waitingroom (praxis_patient_waitingroom.praxis_waitingroomid)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient_waitingroom.praxis_waitingroomid"; - ogit:type "xsd:integer" . - -ogit.Healthcare:toDocId - a ogit:Property; - rdfs:label "toDocId"; - dcterms:description "Doctor assigned to handle the visit (praxis_patient_waitingroom.p_to_doc_id)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient_waitingroom.p_to_doc_id"; - ogit:type "xsd:integer" . - -ogit.Healthcare:loginAt - a ogit:Property; - rdfs:label "loginAt"; - dcterms:description "Patient login time into waiting room (praxis_patient_waitingroom.p_login)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient_waitingroom.p_login"; - ogit:type "xsd:dateTime" . - -ogit.Healthcare:logoutAt - a ogit:Property; - rdfs:label "logoutAt"; - dcterms:description "Patient logout / visit-end time (praxis_patient_waitingroom.p_logout)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient_waitingroom.p_logout"; - ogit:type "xsd:dateTime" . - -ogit.Healthcare:timeInWaiting - a ogit:Property; - rdfs:label "timeInWaiting"; - dcterms:description "Computed waiting duration in minutes (praxis_patient_waitingroom.p_time_in_waiting)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient_waitingroom.p_time_in_waiting"; - ogit:type "xsd:integer" . - -ogit.Healthcare:priority - a ogit:Property; - rdfs:label "priority"; - dcterms:description "Visit triage priority (praxis_patient_waitingroom.p_priority)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient_waitingroom.p_priority"; - ogit:type "xsd:integer" . - -ogit.Healthcare:noticeForDoc - a ogit:Property; - rdfs:label "noticeForDoc"; - dcterms:description "Free-text reception notice for the doctor (praxis_patient_waitingroom.p_notice_for_doc)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:praxis_patient_waitingroom.p_notice_for_doc"; - ogit:type "xsd:string" . diff --git a/NTO/Healthcare/entities/VitalSign.ttl b/NTO/Healthcare/entities/VitalSign.ttl index 4e0c944535..43919f3986 100644 --- a/NTO/Healthcare/entities/VitalSign.ttl +++ b/NTO/Healthcare/entities/VitalSign.ttl @@ -9,6 +9,7 @@ ogit.Healthcare:VitalSign a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "VitalSign"; + dcterms:valid "start=2026-10-10;"; dcterms:description "A patient vital-sign measurement. Modelled here as the base class for the pf_vital_* family — the canonical / minimal source-of-truth is pf_vital_bloodpressure (id, pid, datum, sys, dia, pulse). Subclasses (pf_vital_dynmodule, pf_vital_temperature, etc.) extend with module-specific columns."; dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_vital_bloodpressure"; dcterms:creator "claude-ogit-bootstrap"; @@ -30,31 +31,3 @@ ogit.Healthcare:VitalSign [ ogit:belongs ogit.Healthcare:Patient ] ); . - -ogit.Healthcare:datum - a ogit:Property; - rdfs:label "datum"; - dcterms:description "Measurement timestamp (pf_vital_bloodpressure.datum)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_vital_bloodpressure.datum"; - ogit:type "xsd:dateTime" . - -ogit.Healthcare:bloodPressureSystolic - a ogit:Property; - rdfs:label "bloodPressureSystolic"; - dcterms:description "Systolic blood pressure in mmHg (pf_vital_bloodpressure.sys)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_vital_bloodpressure.sys"; - ogit:type "xsd:float" . - -ogit.Healthcare:bloodPressureDiastolic - a ogit:Property; - rdfs:label "bloodPressureDiastolic"; - dcterms:description "Diastolic blood pressure in mmHg (pf_vital_bloodpressure.dia)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_vital_bloodpressure.dia"; - ogit:type "xsd:float" . - -ogit.Healthcare:pulse - a ogit:Property; - rdfs:label "pulse"; - dcterms:description "Pulse rate (bpm) (pf_vital_bloodpressure.pulse)."; - dcterms:source "AdaWorldAPI/MedCare-rs/.MYSQL/Struktur.sql:pf_vital_bloodpressure.pulse"; - ogit:type "xsd:float" . diff --git a/NTO/Healthcare/verbs/assesses.ttl b/NTO/Healthcare/verbs/assesses.ttl new file mode 100644 index 0000000000..69de74fb05 --- /dev/null +++ b/NTO/Healthcare/verbs/assesses.ttl @@ -0,0 +1,14 @@ +@prefix ogit: . +@prefix ogit.Healthcare: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Healthcare:assesses + a owl:ObjectProperty; + rdfs:subPropertyOf ogit:Verb; + rdfs:label "assesses"; + dcterms:description "An assessment evaluates an anatomical structure and produces findings about it."; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. From 2b56833c0b9724de677be490cf0766bdb3ef8286 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 28 Oct 2026 02:22:35 +0000 Subject: [PATCH 07/16] Declare the WorkOrder attributes the validator could not find - The inline rdfs:Property blocks move into NTO/WorkOrder/attributes/, one file per attribute, as owl:DatatypeProperty + rdfs:subPropertyOf ogit:Attribute. IRIs are unchanged. Six attributes were defined in two or three entity files with different wording; each now has one description and lists every source column. - Thirteen attributes were referenced but defined nowhere (geraet, logbuch, intern, aktion, details, dateiname, anKunde, sortOrder, posTyp, menge, einheit, einzelpreis, versteckt); they are declared from their entities' descriptions. - ogit:created-at does not exist; references now use the existing ogit:createdAt. - Entities gain the dcterms:valid / dcterms:creator / ogit:allowed lines validation0.rq requires. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMPWTwovjYJEUMuGPb4 --- NTO/WorkOrder/attributes/abfahrt.ttl | 15 ++ NTO/WorkOrder/attributes/abgerechnet.ttl | 15 ++ NTO/WorkOrder/attributes/adresszusatz.ttl | 15 ++ NTO/WorkOrder/attributes/aktion.ttl | 15 ++ NTO/WorkOrder/attributes/aktiv.ttl | 15 ++ NTO/WorkOrder/attributes/anKunde.ttl | 15 ++ NTO/WorkOrder/attributes/anfahrten.ttl | 15 ++ NTO/WorkOrder/attributes/ankunft.ttl | 15 ++ NTO/WorkOrder/attributes/anrede.ttl | 15 ++ NTO/WorkOrder/attributes/artikelnr.ttl | 15 ++ NTO/WorkOrder/attributes/benutzername.ttl | 15 ++ NTO/WorkOrder/attributes/beschreibung.ttl | 15 ++ NTO/WorkOrder/attributes/betreff.ttl | 15 ++ NTO/WorkOrder/attributes/bezahlt.ttl | 15 ++ NTO/WorkOrder/attributes/bezahltAm.ttl | 15 ++ NTO/WorkOrder/attributes/bruttoSumme.ttl | 15 ++ NTO/WorkOrder/attributes/createdAt.ttl | 15 ++ NTO/WorkOrder/attributes/current.ttl | 15 ++ NTO/WorkOrder/attributes/dateiname.ttl | 15 ++ NTO/WorkOrder/attributes/datum.ttl | 15 ++ NTO/WorkOrder/attributes/details.ttl | 15 ++ NTO/WorkOrder/attributes/docType.ttl | 15 ++ NTO/WorkOrder/attributes/einheit.ttl | 15 ++ NTO/WorkOrder/attributes/einzelpreis.ttl | 15 ++ NTO/WorkOrder/attributes/ekPreis.ttl | 15 ++ NTO/WorkOrder/attributes/email.ttl | 15 ++ NTO/WorkOrder/attributes/endeKm.ttl | 15 ++ NTO/WorkOrder/attributes/fahrtKm.ttl | 15 ++ NTO/WorkOrder/attributes/fahrtKosten.ttl | 15 ++ NTO/WorkOrder/attributes/fahrzeug.ttl | 15 ++ NTO/WorkOrder/attributes/firma.ttl | 15 ++ NTO/WorkOrder/attributes/firstname.ttl | 15 ++ NTO/WorkOrder/attributes/geraet.ttl | 15 ++ NTO/WorkOrder/attributes/gruppe.ttl | 15 ++ NTO/WorkOrder/attributes/iban.ttl | 15 ++ NTO/WorkOrder/attributes/icon.ttl | 15 ++ NTO/WorkOrder/attributes/intern.ttl | 15 ++ NTO/WorkOrder/attributes/internNotizen.ttl | 15 ++ NTO/WorkOrder/attributes/isAdmin.ttl | 15 ++ NTO/WorkOrder/attributes/isSuperadmin.ttl | 15 ++ NTO/WorkOrder/attributes/kdnr.ttl | 15 ++ NTO/WorkOrder/attributes/label.ttl | 15 ++ NTO/WorkOrder/attributes/lastLogin.ttl | 15 ++ NTO/WorkOrder/attributes/lastname.ttl | 15 ++ NTO/WorkOrder/attributes/letzteMahnung.ttl | 15 ++ NTO/WorkOrder/attributes/lieferant.ttl | 15 ++ NTO/WorkOrder/attributes/lieferantAnr.ttl | 15 ++ NTO/WorkOrder/attributes/logbuch.ttl | 15 ++ NTO/WorkOrder/attributes/logoPath.ttl | 15 ++ NTO/WorkOrder/attributes/mahnstufe.ttl | 15 ++ NTO/WorkOrder/attributes/mailAnrede.ttl | 15 ++ NTO/WorkOrder/attributes/menge.ttl | 15 ++ NTO/WorkOrder/attributes/minuten.ttl | 15 ++ NTO/WorkOrder/attributes/mitarbeiter.ttl | 15 ++ NTO/WorkOrder/attributes/mustChangePw.ttl | 15 ++ NTO/WorkOrder/attributes/mwstBetrag.ttl | 15 ++ NTO/WorkOrder/attributes/mwstSatz.ttl | 15 ++ NTO/WorkOrder/attributes/nachname.ttl | 15 ++ NTO/WorkOrder/attributes/nettoSumme.ttl | 15 ++ NTO/WorkOrder/attributes/notizen.ttl | 15 ++ NTO/WorkOrder/attributes/notizenEnc.ttl | 15 ++ NTO/WorkOrder/attributes/orderId.ttl | 15 ++ NTO/WorkOrder/attributes/ort.ttl | 15 ++ NTO/WorkOrder/attributes/passwordHash.ttl | 15 ++ NTO/WorkOrder/attributes/passwortEnc.ttl | 15 ++ NTO/WorkOrder/attributes/pauseStunden.ttl | 15 ++ NTO/WorkOrder/attributes/phone.ttl | 15 ++ NTO/WorkOrder/attributes/plz.ttl | 15 ++ NTO/WorkOrder/attributes/posTyp.ttl | 15 ++ NTO/WorkOrder/attributes/prefix.ttl | 15 ++ NTO/WorkOrder/attributes/preisNetto.ttl | 15 ++ NTO/WorkOrder/attributes/privatAnteil.ttl | 15 ++ NTO/WorkOrder/attributes/route.ttl | 15 ++ NTO/WorkOrder/attributes/rueckfahrt.ttl | 15 ++ NTO/WorkOrder/attributes/settingKey.ttl | 15 ++ NTO/WorkOrder/attributes/settingValue.ttl | 15 ++ NTO/WorkOrder/attributes/slug.ttl | 15 ++ NTO/WorkOrder/attributes/sortOrder.ttl | 15 ++ NTO/WorkOrder/attributes/startKm.ttl | 15 ++ NTO/WorkOrder/attributes/strasse.ttl | 15 ++ NTO/WorkOrder/attributes/stundensatz.ttl | 15 ++ NTO/WorkOrder/attributes/taxId.ttl | 15 ++ NTO/WorkOrder/attributes/telefon.ttl | 15 ++ NTO/WorkOrder/attributes/timerStart.ttl | 15 ++ NTO/WorkOrder/attributes/titel.ttl | 15 ++ NTO/WorkOrder/attributes/unterschrift.ttl | 15 ++ NTO/WorkOrder/attributes/updatedAt.ttl | 15 ++ NTO/WorkOrder/attributes/url.ttl | 15 ++ NTO/WorkOrder/attributes/username.ttl | 15 ++ NTO/WorkOrder/attributes/versteckt.ttl | 15 ++ NTO/WorkOrder/attributes/vorname.ttl | 15 ++ NTO/WorkOrder/attributes/zahlungsziel.ttl | 15 ++ NTO/WorkOrder/attributes/zeitEnde.ttl | 15 ++ NTO/WorkOrder/attributes/zeitStart.ttl | 15 ++ NTO/WorkOrder/attributes/zurueck.ttl | 15 ++ NTO/WorkOrder/attributes/zusatzStunden.ttl | 15 ++ NTO/WorkOrder/attributes/zweck.ttl | 15 ++ NTO/WorkOrder/entities/Activity.ttl | 5 +- NTO/WorkOrder/entities/Article.ttl | 60 +------ NTO/WorkOrder/entities/Customer.ttl | 144 +--------------- NTO/WorkOrder/entities/CustomerPortalUser.ttl | 10 +- NTO/WorkOrder/entities/HistoryEntry.ttl | 5 +- NTO/WorkOrder/entities/LogbookEntry.ttl | 80 +-------- NTO/WorkOrder/entities/NumberSequence.ttl | 17 +- NTO/WorkOrder/entities/Order.ttl | 158 +----------------- NTO/WorkOrder/entities/PasswordEntry.ttl | 52 +----- NTO/WorkOrder/entities/Picture.ttl | 5 +- NTO/WorkOrder/entities/Position.ttl | 1 + NTO/WorkOrder/entities/Setting.ttl | 24 +-- NTO/WorkOrder/entities/Tenant.ttl | 34 +--- NTO/WorkOrder/entities/TimeSheet.ttl | 38 +---- NTO/WorkOrder/entities/User.ttl | 66 +------- 112 files changed, 1482 insertions(+), 672 deletions(-) create mode 100644 NTO/WorkOrder/attributes/abfahrt.ttl create mode 100644 NTO/WorkOrder/attributes/abgerechnet.ttl create mode 100644 NTO/WorkOrder/attributes/adresszusatz.ttl create mode 100644 NTO/WorkOrder/attributes/aktion.ttl create mode 100644 NTO/WorkOrder/attributes/aktiv.ttl create mode 100644 NTO/WorkOrder/attributes/anKunde.ttl create mode 100644 NTO/WorkOrder/attributes/anfahrten.ttl create mode 100644 NTO/WorkOrder/attributes/ankunft.ttl create mode 100644 NTO/WorkOrder/attributes/anrede.ttl create mode 100644 NTO/WorkOrder/attributes/artikelnr.ttl create mode 100644 NTO/WorkOrder/attributes/benutzername.ttl create mode 100644 NTO/WorkOrder/attributes/beschreibung.ttl create mode 100644 NTO/WorkOrder/attributes/betreff.ttl create mode 100644 NTO/WorkOrder/attributes/bezahlt.ttl create mode 100644 NTO/WorkOrder/attributes/bezahltAm.ttl create mode 100644 NTO/WorkOrder/attributes/bruttoSumme.ttl create mode 100644 NTO/WorkOrder/attributes/createdAt.ttl create mode 100644 NTO/WorkOrder/attributes/current.ttl create mode 100644 NTO/WorkOrder/attributes/dateiname.ttl create mode 100644 NTO/WorkOrder/attributes/datum.ttl create mode 100644 NTO/WorkOrder/attributes/details.ttl create mode 100644 NTO/WorkOrder/attributes/docType.ttl create mode 100644 NTO/WorkOrder/attributes/einheit.ttl create mode 100644 NTO/WorkOrder/attributes/einzelpreis.ttl create mode 100644 NTO/WorkOrder/attributes/ekPreis.ttl create mode 100644 NTO/WorkOrder/attributes/email.ttl create mode 100644 NTO/WorkOrder/attributes/endeKm.ttl create mode 100644 NTO/WorkOrder/attributes/fahrtKm.ttl create mode 100644 NTO/WorkOrder/attributes/fahrtKosten.ttl create mode 100644 NTO/WorkOrder/attributes/fahrzeug.ttl create mode 100644 NTO/WorkOrder/attributes/firma.ttl create mode 100644 NTO/WorkOrder/attributes/firstname.ttl create mode 100644 NTO/WorkOrder/attributes/geraet.ttl create mode 100644 NTO/WorkOrder/attributes/gruppe.ttl create mode 100644 NTO/WorkOrder/attributes/iban.ttl create mode 100644 NTO/WorkOrder/attributes/icon.ttl create mode 100644 NTO/WorkOrder/attributes/intern.ttl create mode 100644 NTO/WorkOrder/attributes/internNotizen.ttl create mode 100644 NTO/WorkOrder/attributes/isAdmin.ttl create mode 100644 NTO/WorkOrder/attributes/isSuperadmin.ttl create mode 100644 NTO/WorkOrder/attributes/kdnr.ttl create mode 100644 NTO/WorkOrder/attributes/label.ttl create mode 100644 NTO/WorkOrder/attributes/lastLogin.ttl create mode 100644 NTO/WorkOrder/attributes/lastname.ttl create mode 100644 NTO/WorkOrder/attributes/letzteMahnung.ttl create mode 100644 NTO/WorkOrder/attributes/lieferant.ttl create mode 100644 NTO/WorkOrder/attributes/lieferantAnr.ttl create mode 100644 NTO/WorkOrder/attributes/logbuch.ttl create mode 100644 NTO/WorkOrder/attributes/logoPath.ttl create mode 100644 NTO/WorkOrder/attributes/mahnstufe.ttl create mode 100644 NTO/WorkOrder/attributes/mailAnrede.ttl create mode 100644 NTO/WorkOrder/attributes/menge.ttl create mode 100644 NTO/WorkOrder/attributes/minuten.ttl create mode 100644 NTO/WorkOrder/attributes/mitarbeiter.ttl create mode 100644 NTO/WorkOrder/attributes/mustChangePw.ttl create mode 100644 NTO/WorkOrder/attributes/mwstBetrag.ttl create mode 100644 NTO/WorkOrder/attributes/mwstSatz.ttl create mode 100644 NTO/WorkOrder/attributes/nachname.ttl create mode 100644 NTO/WorkOrder/attributes/nettoSumme.ttl create mode 100644 NTO/WorkOrder/attributes/notizen.ttl create mode 100644 NTO/WorkOrder/attributes/notizenEnc.ttl create mode 100644 NTO/WorkOrder/attributes/orderId.ttl create mode 100644 NTO/WorkOrder/attributes/ort.ttl create mode 100644 NTO/WorkOrder/attributes/passwordHash.ttl create mode 100644 NTO/WorkOrder/attributes/passwortEnc.ttl create mode 100644 NTO/WorkOrder/attributes/pauseStunden.ttl create mode 100644 NTO/WorkOrder/attributes/phone.ttl create mode 100644 NTO/WorkOrder/attributes/plz.ttl create mode 100644 NTO/WorkOrder/attributes/posTyp.ttl create mode 100644 NTO/WorkOrder/attributes/prefix.ttl create mode 100644 NTO/WorkOrder/attributes/preisNetto.ttl create mode 100644 NTO/WorkOrder/attributes/privatAnteil.ttl create mode 100644 NTO/WorkOrder/attributes/route.ttl create mode 100644 NTO/WorkOrder/attributes/rueckfahrt.ttl create mode 100644 NTO/WorkOrder/attributes/settingKey.ttl create mode 100644 NTO/WorkOrder/attributes/settingValue.ttl create mode 100644 NTO/WorkOrder/attributes/slug.ttl create mode 100644 NTO/WorkOrder/attributes/sortOrder.ttl create mode 100644 NTO/WorkOrder/attributes/startKm.ttl create mode 100644 NTO/WorkOrder/attributes/strasse.ttl create mode 100644 NTO/WorkOrder/attributes/stundensatz.ttl create mode 100644 NTO/WorkOrder/attributes/taxId.ttl create mode 100644 NTO/WorkOrder/attributes/telefon.ttl create mode 100644 NTO/WorkOrder/attributes/timerStart.ttl create mode 100644 NTO/WorkOrder/attributes/titel.ttl create mode 100644 NTO/WorkOrder/attributes/unterschrift.ttl create mode 100644 NTO/WorkOrder/attributes/updatedAt.ttl create mode 100644 NTO/WorkOrder/attributes/url.ttl create mode 100644 NTO/WorkOrder/attributes/username.ttl create mode 100644 NTO/WorkOrder/attributes/versteckt.ttl create mode 100644 NTO/WorkOrder/attributes/vorname.ttl create mode 100644 NTO/WorkOrder/attributes/zahlungsziel.ttl create mode 100644 NTO/WorkOrder/attributes/zeitEnde.ttl create mode 100644 NTO/WorkOrder/attributes/zeitStart.ttl create mode 100644 NTO/WorkOrder/attributes/zurueck.ttl create mode 100644 NTO/WorkOrder/attributes/zusatzStunden.ttl create mode 100644 NTO/WorkOrder/attributes/zweck.ttl diff --git a/NTO/WorkOrder/attributes/abfahrt.ttl b/NTO/WorkOrder/attributes/abfahrt.ttl new file mode 100644 index 0000000000..82486c4087 --- /dev/null +++ b/NTO/WorkOrder/attributes/abfahrt.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:abfahrt + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "abfahrt"; + dcterms:description "Departure time as HH:MM string (max 5 chars)."; + dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.abfahrt"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/abgerechnet.ttl b/NTO/WorkOrder/attributes/abgerechnet.ttl new file mode 100644 index 0000000000..eb23bfd4db --- /dev/null +++ b/NTO/WorkOrder/attributes/abgerechnet.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:abgerechnet + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "abgerechnet"; + dcterms:description "Boolean billed-flag. True once the time entry has been transferred onto an invoice document, preventing double-billing."; + dcterms:source "AdaWorldAPI/WoA/models.py:TimeSheet.abgerechnet"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/adresszusatz.ttl b/NTO/WorkOrder/attributes/adresszusatz.ttl new file mode 100644 index 0000000000..20d9c3ff24 --- /dev/null +++ b/NTO/WorkOrder/attributes/adresszusatz.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:adresszusatz + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "adresszusatz"; + dcterms:description "Address line 2 (Adresszusatz). Optional second address line for c/o, building, suite, etc."; + dcterms:source "AdaWorldAPI/WoA/models.py:Customer.adresszusatz"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/aktion.ttl b/NTO/WorkOrder/attributes/aktion.ttl new file mode 100644 index 0000000000..40de2fa01b --- /dev/null +++ b/NTO/WorkOrder/attributes/aktion.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:aktion + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "aktion"; + dcterms:description "Action label (Aktion) of an audit entry, naming the state change that was recorded."; + dcterms:source "AdaWorldAPI/WoA/models.py:HistoryEntry"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/aktiv.ttl b/NTO/WorkOrder/attributes/aktiv.ttl new file mode 100644 index 0000000000..aabf96efc5 --- /dev/null +++ b/NTO/WorkOrder/attributes/aktiv.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:aktiv + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "aktiv"; + dcterms:description "Active flag (aktiv). Boolean; false archives or soft-disables the record instead of deleting it. Used by Article, Customer and Tenant."; + dcterms:source "AdaWorldAPI/WoA/models.py:Article.aktiv", "AdaWorldAPI/WoA/models.py:Customer.aktiv", "AdaWorldAPI/WoA/models.py:Tenant.aktiv"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/anKunde.ttl b/NTO/WorkOrder/attributes/anKunde.ttl new file mode 100644 index 0000000000..b55c1fe842 --- /dev/null +++ b/NTO/WorkOrder/attributes/anKunde.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:anKunde + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "anKunde"; + dcterms:description "Customer flag (an_kunde). Boolean; true makes the attachment visible to, or sends it to, the customer."; + dcterms:source "AdaWorldAPI/WoA/models.py:Picture"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/anfahrten.ttl b/NTO/WorkOrder/attributes/anfahrten.ttl new file mode 100644 index 0000000000..e0a9189071 --- /dev/null +++ b/NTO/WorkOrder/attributes/anfahrten.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:anfahrten + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "anfahrten"; + dcterms:description "Number of approach trips (Anfahrten) charged to the Order. Integer count used by the trip-cost derivation against Customer.fahrtKm / fahrtKosten."; + dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.anfahrten"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/ankunft.ttl b/NTO/WorkOrder/attributes/ankunft.ttl new file mode 100644 index 0000000000..5451f45e42 --- /dev/null +++ b/NTO/WorkOrder/attributes/ankunft.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:ankunft + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "ankunft"; + dcterms:description "Arrival time at destination as HH:MM string (max 5 chars)."; + dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.ankunft"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/anrede.ttl b/NTO/WorkOrder/attributes/anrede.ttl new file mode 100644 index 0000000000..30e9887350 --- /dev/null +++ b/NTO/WorkOrder/attributes/anrede.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:anrede + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "anrede"; + dcterms:description "Form of address (Anrede). One of: Herr, Frau, Firma. Drives salutation rendering on the document."; + dcterms:source "AdaWorldAPI/WoA/models.py:Customer.anrede"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/artikelnr.ttl b/NTO/WorkOrder/attributes/artikelnr.ttl new file mode 100644 index 0000000000..e990480dd8 --- /dev/null +++ b/NTO/WorkOrder/attributes/artikelnr.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:artikelnr + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "artikelnr"; + dcterms:description "Article number (Artikelnummer). Tenant-local short code used on invoices, lookup forms and inventory listings."; + dcterms:source "AdaWorldAPI/WoA/models.py:Article.artikelnr"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/benutzername.ttl b/NTO/WorkOrder/attributes/benutzername.ttl new file mode 100644 index 0000000000..6b14f18412 --- /dev/null +++ b/NTO/WorkOrder/attributes/benutzername.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:benutzername + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "benutzername"; + dcterms:description "Plaintext account-username for the resource (max 200 chars). NOT encrypted — only the password and notes carry sensitive material."; + dcterms:source "AdaWorldAPI/WoA/models.py:PasswordEntry.benutzername"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/beschreibung.ttl b/NTO/WorkOrder/attributes/beschreibung.ttl new file mode 100644 index 0000000000..0dc674fe19 --- /dev/null +++ b/NTO/WorkOrder/attributes/beschreibung.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:beschreibung + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "beschreibung"; + dcterms:description "Free-text description (Beschreibung): the article text printed on order positions, or the work performed in a time entry."; + dcterms:source "AdaWorldAPI/WoA/models.py:Article.beschreibung", "AdaWorldAPI/WoA/models.py:TimeSheet.beschreibung"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/betreff.ttl b/NTO/WorkOrder/attributes/betreff.ttl new file mode 100644 index 0000000000..f28e1d9258 --- /dev/null +++ b/NTO/WorkOrder/attributes/betreff.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:betreff + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "betreff"; + dcterms:description "Subject / heading line (Betreff) printed at the top of the document."; + dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.betreff"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/bezahlt.ttl b/NTO/WorkOrder/attributes/bezahlt.ttl new file mode 100644 index 0000000000..f644446d1d --- /dev/null +++ b/NTO/WorkOrder/attributes/bezahlt.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:bezahlt + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "bezahlt"; + dcterms:description "Payment-received flag. Boolean; true once the order has been settled by the customer."; + dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.bezahlt"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/bezahltAm.ttl b/NTO/WorkOrder/attributes/bezahltAm.ttl new file mode 100644 index 0000000000..d2b8f4f3c7 --- /dev/null +++ b/NTO/WorkOrder/attributes/bezahltAm.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:bezahltAm + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "bezahltAm"; + dcterms:description "Payment date (bezahlt am). ISO-8601 date set when the bezahlt flag is flipped from false to true. Drives the close-of-books reconciliation."; + dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.bezahlt_am"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/bruttoSumme.ttl b/NTO/WorkOrder/attributes/bruttoSumme.ttl new file mode 100644 index 0000000000..4093ccdced --- /dev/null +++ b/NTO/WorkOrder/attributes/bruttoSumme.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:bruttoSumme + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "bruttoSumme"; + dcterms:description "Gross total (Brutto-Summe) = nettoSumme + mwstBetrag."; + dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.brutto_summe"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/createdAt.ttl b/NTO/WorkOrder/attributes/createdAt.ttl new file mode 100644 index 0000000000..ae97187041 --- /dev/null +++ b/NTO/WorkOrder/attributes/createdAt.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:createdAt + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "createdAt"; + dcterms:description "ISO-8601 UTC timestamp recording when the record was first persisted."; + dcterms:source "AdaWorldAPI/WoA/models.py:Customer.created_at", "AdaWorldAPI/WoA/models.py:WorkOrder.created_at", "AdaWorldAPI/WoA/models.py"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/current.ttl b/NTO/WorkOrder/attributes/current.ttl new file mode 100644 index 0000000000..2e618d0810 --- /dev/null +++ b/NTO/WorkOrder/attributes/current.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:current + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "current"; + dcterms:description "Monotonically increasing integer holding the most-recently-issued counter value. Incremented in-place by next_val() inside a database transaction."; + dcterms:source "AdaWorldAPI/WoA/models.py:NumberSequence.current"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/dateiname.ttl b/NTO/WorkOrder/attributes/dateiname.ttl new file mode 100644 index 0000000000..70d3eb4a88 --- /dev/null +++ b/NTO/WorkOrder/attributes/dateiname.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:dateiname + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "dateiname"; + dcterms:description "Stored file name (Dateiname) of an image or document attachment."; + dcterms:source "AdaWorldAPI/WoA/models.py:Picture"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/datum.ttl b/NTO/WorkOrder/attributes/datum.ttl new file mode 100644 index 0000000000..3964450e08 --- /dev/null +++ b/NTO/WorkOrder/attributes/datum.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:datum + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "datum"; + dcterms:description "ISO-8601 calendar date of the record (Datum): the document date of an order, or the date of a logbook trip."; + dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.datum", "AdaWorldAPI/WoA/models.py:WorkOrder.datum"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/details.ttl b/NTO/WorkOrder/attributes/details.ttl new file mode 100644 index 0000000000..c375cd99d7 --- /dev/null +++ b/NTO/WorkOrder/attributes/details.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:details + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "details"; + dcterms:description "Free-text details of an audit entry."; + dcterms:source "AdaWorldAPI/WoA/models.py:HistoryEntry"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/docType.ttl b/NTO/WorkOrder/attributes/docType.ttl new file mode 100644 index 0000000000..8349dc8851 --- /dev/null +++ b/NTO/WorkOrder/attributes/docType.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:docType + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "docType"; + dcterms:description "Discriminator for the document variant. One of: workorder, offer, order, invoice, credit. Mirrors WorkOrder.doc_type in the source."; + dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.doc_type"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/einheit.ttl b/NTO/WorkOrder/attributes/einheit.ttl new file mode 100644 index 0000000000..70a1a37eb0 --- /dev/null +++ b/NTO/WorkOrder/attributes/einheit.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:einheit + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "einheit"; + dcterms:description "Unit (Einheit) in which the quantity of a line item is measured."; + dcterms:source "AdaWorldAPI/WoA/models.py:Position"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/einzelpreis.ttl b/NTO/WorkOrder/attributes/einzelpreis.ttl new file mode 100644 index 0000000000..0a40f874a3 --- /dev/null +++ b/NTO/WorkOrder/attributes/einzelpreis.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:einzelpreis + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "einzelpreis"; + dcterms:description "Unit price (Einzelpreis) of a line item."; + dcterms:source "AdaWorldAPI/WoA/models.py:Position"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/ekPreis.ttl b/NTO/WorkOrder/attributes/ekPreis.ttl new file mode 100644 index 0000000000..82218aa919 --- /dev/null +++ b/NTO/WorkOrder/attributes/ekPreis.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:ekPreis + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "ekPreis"; + dcterms:description "Purchase price (Einkaufspreis) used for margin calculation against preisNetto."; + dcterms:source "AdaWorldAPI/WoA/models.py:Article.ek_preis"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/email.ttl b/NTO/WorkOrder/attributes/email.ttl new file mode 100644 index 0000000000..fb93715195 --- /dev/null +++ b/NTO/WorkOrder/attributes/email.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:email + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "email"; + dcterms:description "User's primary email address (max 200 chars). Used for notifications and password resets."; + dcterms:source "AdaWorldAPI/WoA/models.py:User.email"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/endeKm.ttl b/NTO/WorkOrder/attributes/endeKm.ttl new file mode 100644 index 0000000000..4694ad19d3 --- /dev/null +++ b/NTO/WorkOrder/attributes/endeKm.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:endeKm + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "endeKm"; + dcterms:description "Odometer reading at trip end (kilometers, float). The trip's total distance is end_km - start_km."; + dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.ende_km"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/fahrtKm.ttl b/NTO/WorkOrder/attributes/fahrtKm.ttl new file mode 100644 index 0000000000..7f4bcbb5df --- /dev/null +++ b/NTO/WorkOrder/attributes/fahrtKm.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:fahrtKm + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "fahrtKm"; + dcterms:description "One-way travel distance in kilometres (Fahrt km). Multiplied by Order.anfahrten and fahrtKosten to compute the trip-cost line item."; + dcterms:source "AdaWorldAPI/WoA/models.py:Customer.fahrt_km"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/fahrtKosten.ttl b/NTO/WorkOrder/attributes/fahrtKosten.ttl new file mode 100644 index 0000000000..4b9ca58615 --- /dev/null +++ b/NTO/WorkOrder/attributes/fahrtKosten.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:fahrtKosten + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "fahrtKosten"; + dcterms:description "Per-kilometre travel cost in the tenant's currency (Fahrt Kosten). Float; default 0.0. Used together with fahrtKm and Order.anfahrten to compute trip-cost line items."; + dcterms:source "AdaWorldAPI/WoA/models.py:Customer.fahrt_kosten"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/fahrzeug.ttl b/NTO/WorkOrder/attributes/fahrzeug.ttl new file mode 100644 index 0000000000..6ce7d7b936 --- /dev/null +++ b/NTO/WorkOrder/attributes/fahrzeug.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:fahrzeug + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "fahrzeug"; + dcterms:description "Vehicle identifier (license plate or fleet name, max 100 chars)."; + dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.fahrzeug"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/firma.ttl b/NTO/WorkOrder/attributes/firma.ttl new file mode 100644 index 0000000000..678a206333 --- /dev/null +++ b/NTO/WorkOrder/attributes/firma.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:firma + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "firma"; + dcterms:description "Company name (Firma). Empty for private customers; in that case display falls back to vorname + nachname."; + dcterms:source "AdaWorldAPI/WoA/models.py:Customer.firma"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/firstname.ttl b/NTO/WorkOrder/attributes/firstname.ttl new file mode 100644 index 0000000000..4eb618fda7 --- /dev/null +++ b/NTO/WorkOrder/attributes/firstname.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:firstname + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "firstname"; + dcterms:description "User's given name (max 120 chars)."; + dcterms:source "AdaWorldAPI/WoA/models.py:User.firstname"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/geraet.ttl b/NTO/WorkOrder/attributes/geraet.ttl new file mode 100644 index 0000000000..bef0778213 --- /dev/null +++ b/NTO/WorkOrder/attributes/geraet.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:geraet + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "geraet"; + dcterms:description "Optional reference to the device or asset (Geraet) the activity was performed on."; + dcterms:source "AdaWorldAPI/WoA/models.py:Activity"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/gruppe.ttl b/NTO/WorkOrder/attributes/gruppe.ttl new file mode 100644 index 0000000000..e1fb4a7da9 --- /dev/null +++ b/NTO/WorkOrder/attributes/gruppe.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:gruppe + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "gruppe"; + dcterms:description "Vault folder/category (max 100 chars, default 'Allgemein'). Free-form grouping used to organise entries in the UI tree."; + dcterms:source "AdaWorldAPI/WoA/models.py:PasswordEntry.gruppe"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/iban.ttl b/NTO/WorkOrder/attributes/iban.ttl new file mode 100644 index 0000000000..34a3558f60 --- /dev/null +++ b/NTO/WorkOrder/attributes/iban.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:iban + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "iban"; + dcterms:description "International Bank Account Number for SEPA payments. Optional; not modelled as a column in the current Python source but reserved here for the OGIT projection."; + dcterms:source "AdaWorldAPI/WoA/models.py:Customer"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/icon.ttl b/NTO/WorkOrder/attributes/icon.ttl new file mode 100644 index 0000000000..f5311241b3 --- /dev/null +++ b/NTO/WorkOrder/attributes/icon.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:icon + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "icon"; + dcterms:description "Icon glyph name (max 50 chars, default 'key') used by the UI to render the entry visually."; + dcterms:source "AdaWorldAPI/WoA/models.py:PasswordEntry.icon"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/intern.ttl b/NTO/WorkOrder/attributes/intern.ttl new file mode 100644 index 0000000000..469a312da2 --- /dev/null +++ b/NTO/WorkOrder/attributes/intern.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:intern + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "intern"; + dcterms:description "Internal-only flag (intern). Boolean; true keeps the activity off customer-facing documents."; + dcterms:source "AdaWorldAPI/WoA/models.py:Activity"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/internNotizen.ttl b/NTO/WorkOrder/attributes/internNotizen.ttl new file mode 100644 index 0000000000..6ac155b030 --- /dev/null +++ b/NTO/WorkOrder/attributes/internNotizen.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:internNotizen + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "internNotizen"; + dcterms:description "Internal notes (interne Notizen). Free-text block visible only to staff; never printed on the customer-facing document."; + dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.intern_notizen"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/isAdmin.ttl b/NTO/WorkOrder/attributes/isAdmin.ttl new file mode 100644 index 0000000000..f734b5192b --- /dev/null +++ b/NTO/WorkOrder/attributes/isAdmin.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:isAdmin + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "isAdmin"; + dcterms:description "Boolean flag granting admin-level access within the User's tenant scope (manage customers, articles, settings)."; + dcterms:source "AdaWorldAPI/WoA/models.py:User.is_admin"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/isSuperadmin.ttl b/NTO/WorkOrder/attributes/isSuperadmin.ttl new file mode 100644 index 0000000000..abc63d1396 --- /dev/null +++ b/NTO/WorkOrder/attributes/isSuperadmin.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:isSuperadmin + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "isSuperadmin"; + dcterms:description "Boolean flag granting cross-tenant superadmin access (manage tenants, system-wide configuration)."; + dcterms:source "AdaWorldAPI/WoA/models.py:User.is_superadmin"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/kdnr.ttl b/NTO/WorkOrder/attributes/kdnr.ttl new file mode 100644 index 0000000000..5c95de120b --- /dev/null +++ b/NTO/WorkOrder/attributes/kdnr.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:kdnr + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "kdnr"; + dcterms:description "Customer number (Kundennummer). Tenant-local short code used on invoices and in correspondence."; + dcterms:source "AdaWorldAPI/WoA/models.py:Customer.kdnr"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/label.ttl b/NTO/WorkOrder/attributes/label.ttl new file mode 100644 index 0000000000..298f4fe093 --- /dev/null +++ b/NTO/WorkOrder/attributes/label.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:label + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "label"; + dcterms:description "Human-readable caption (max 200 chars) shown next to the key in admin UIs."; + dcterms:source "AdaWorldAPI/WoA/models.py:Setting.label"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/lastLogin.ttl b/NTO/WorkOrder/attributes/lastLogin.ttl new file mode 100644 index 0000000000..21e9daf524 --- /dev/null +++ b/NTO/WorkOrder/attributes/lastLogin.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:lastLogin + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "lastLogin"; + dcterms:description "ISO-8601 UTC timestamp of the most recent successful portal login. Null on accounts that have never signed in."; + dcterms:source "AdaWorldAPI/WoA/models.py:CustomerPortalUser.last_login"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/lastname.ttl b/NTO/WorkOrder/attributes/lastname.ttl new file mode 100644 index 0000000000..6f906ffbaa --- /dev/null +++ b/NTO/WorkOrder/attributes/lastname.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:lastname + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "lastname"; + dcterms:description "User's family name (max 120 chars)."; + dcterms:source "AdaWorldAPI/WoA/models.py:User.lastname"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/letzteMahnung.ttl b/NTO/WorkOrder/attributes/letzteMahnung.ttl new file mode 100644 index 0000000000..b955cba49b --- /dev/null +++ b/NTO/WorkOrder/attributes/letzteMahnung.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:letzteMahnung + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "letzteMahnung"; + dcterms:description "Date of the most recent dunning notice (letzte Mahnung). ISO-8601 date, advanced when mahnstufe is incremented."; + dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.letzte_mahnung"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/lieferant.ttl b/NTO/WorkOrder/attributes/lieferant.ttl new file mode 100644 index 0000000000..ce6a58dbc8 --- /dev/null +++ b/NTO/WorkOrder/attributes/lieferant.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:lieferant + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "lieferant"; + dcterms:description "Supplier name (Lieferant) the article is normally sourced from. Free-form string; not a relation to a separate Supplier class in the current source."; + dcterms:source "AdaWorldAPI/WoA/models.py:Article.lieferant"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/lieferantAnr.ttl b/NTO/WorkOrder/attributes/lieferantAnr.ttl new file mode 100644 index 0000000000..a0f0a87fc8 --- /dev/null +++ b/NTO/WorkOrder/attributes/lieferantAnr.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:lieferantAnr + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "lieferantAnr"; + dcterms:description "Supplier-side article number (Lieferanten-Artikelnummer). Used when reordering: the artikelnr is the tenant-local code, lieferantAnr is the SKU at the supplier."; + dcterms:source "AdaWorldAPI/WoA/models.py:Article.lieferant_anr"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/logbuch.ttl b/NTO/WorkOrder/attributes/logbuch.ttl new file mode 100644 index 0000000000..79a863117c --- /dev/null +++ b/NTO/WorkOrder/attributes/logbuch.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:logbuch + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "logbuch"; + dcterms:description "Logbook flag (Logbuch). Boolean; true includes the record in the driver/work logbook export."; + dcterms:source "AdaWorldAPI/WoA/models.py:Activity", "AdaWorldAPI/WoA/models.py:Picture"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/logoPath.ttl b/NTO/WorkOrder/attributes/logoPath.ttl new file mode 100644 index 0000000000..af8c724b73 --- /dev/null +++ b/NTO/WorkOrder/attributes/logoPath.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:logoPath + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "logoPath"; + dcterms:description "Filesystem or URL path to the tenant's logo image used in PDF/HTML rendering of work orders."; + dcterms:source "AdaWorldAPI/WoA/models.py:Tenant.logo_path"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/mahnstufe.ttl b/NTO/WorkOrder/attributes/mahnstufe.ttl new file mode 100644 index 0000000000..fc5e3f7c56 --- /dev/null +++ b/NTO/WorkOrder/attributes/mahnstufe.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:mahnstufe + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "mahnstufe"; + dcterms:description "Dunning level (Mahnstufe). Integer 0-3: 0 = nothing sent, 1-3 = three escalation tiers per the Mahnwesen workflow."; + dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.mahnstufe"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/mailAnrede.ttl b/NTO/WorkOrder/attributes/mailAnrede.ttl new file mode 100644 index 0000000000..65443dc76b --- /dev/null +++ b/NTO/WorkOrder/attributes/mailAnrede.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:mailAnrede + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "mailAnrede"; + dcterms:description "Email salutation override (mail_anrede). Free-text override for the opening line of automated mails (e.g. 'Sehr geehrte Frau Mueller'). When empty, derived from anrede + nachname."; + dcterms:source "AdaWorldAPI/WoA/models.py:Customer.mail_anrede"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/menge.ttl b/NTO/WorkOrder/attributes/menge.ttl new file mode 100644 index 0000000000..81ec9a6643 --- /dev/null +++ b/NTO/WorkOrder/attributes/menge.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:menge + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "menge"; + dcterms:description "Quantity (Menge) of a line item."; + dcterms:source "AdaWorldAPI/WoA/models.py:Position"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/minuten.ttl b/NTO/WorkOrder/attributes/minuten.ttl new file mode 100644 index 0000000000..d0c6d11df1 --- /dev/null +++ b/NTO/WorkOrder/attributes/minuten.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:minuten + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "minuten"; + dcterms:description "Duration of the recorded work in minutes (integer). Display helpers round up to the nearest 15-minute increment for billing."; + dcterms:source "AdaWorldAPI/WoA/models.py:TimeSheet.minuten"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/mitarbeiter.ttl b/NTO/WorkOrder/attributes/mitarbeiter.ttl new file mode 100644 index 0000000000..a970084b6d --- /dev/null +++ b/NTO/WorkOrder/attributes/mitarbeiter.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:mitarbeiter + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "mitarbeiter"; + dcterms:description "Crew on site (Mitarbeiter). Free-form short label or comma-separated names; the Python source keeps it as a string column rather than a User-relation join because crew composition is often informal."; + dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.mitarbeiter"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/mustChangePw.ttl b/NTO/WorkOrder/attributes/mustChangePw.ttl new file mode 100644 index 0000000000..30aa873e86 --- /dev/null +++ b/NTO/WorkOrder/attributes/mustChangePw.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:mustChangePw + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "mustChangePw"; + dcterms:description "Boolean forced-password-change marker. When true, the next successful login redirects the user to the password-reset flow."; + dcterms:source "AdaWorldAPI/WoA/models.py:User.must_change_pw"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/mwstBetrag.ttl b/NTO/WorkOrder/attributes/mwstBetrag.ttl new file mode 100644 index 0000000000..80e4982191 --- /dev/null +++ b/NTO/WorkOrder/attributes/mwstBetrag.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:mwstBetrag + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "mwstBetrag"; + dcterms:description "VAT amount (MwSt-Betrag). Derived in Python as sum(menge × einzelpreis × mwst_satz / 100) over all positions."; + dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.mwst_betrag"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/mwstSatz.ttl b/NTO/WorkOrder/attributes/mwstSatz.ttl new file mode 100644 index 0000000000..1542496e77 --- /dev/null +++ b/NTO/WorkOrder/attributes/mwstSatz.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:mwstSatz + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "mwstSatz"; + dcterms:description "VAT rate (MwSt-Satz) in percent applied when this article appears as a position. Float, default 19.0."; + dcterms:source "AdaWorldAPI/WoA/models.py:Article.mwst_satz"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/nachname.ttl b/NTO/WorkOrder/attributes/nachname.ttl new file mode 100644 index 0000000000..f3b0e3608d --- /dev/null +++ b/NTO/WorkOrder/attributes/nachname.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:nachname + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "nachname"; + dcterms:description "Family name (Nachname) of the contact person."; + dcterms:source "AdaWorldAPI/WoA/models.py:Customer.nachname"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/nettoSumme.ttl b/NTO/WorkOrder/attributes/nettoSumme.ttl new file mode 100644 index 0000000000..9317dc9d69 --- /dev/null +++ b/NTO/WorkOrder/attributes/nettoSumme.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:nettoSumme + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "nettoSumme"; + dcterms:description "Net total (Netto-Summe). Derived in Python as sum(menge × einzelpreis) over all positions; materialised on the OGIT projection."; + dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.netto_summe"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/notizen.ttl b/NTO/WorkOrder/attributes/notizen.ttl new file mode 100644 index 0000000000..8bd39fe2fa --- /dev/null +++ b/NTO/WorkOrder/attributes/notizen.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:notizen + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "notizen"; + dcterms:description "Free-text notes (Notizen). Internal on a customer; printed below the position list on an order."; + dcterms:source "AdaWorldAPI/WoA/models.py:Customer.notizen", "AdaWorldAPI/WoA/models.py:WorkOrder.notizen"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/notizenEnc.ttl b/NTO/WorkOrder/attributes/notizenEnc.ttl new file mode 100644 index 0000000000..c642b96acc --- /dev/null +++ b/NTO/WorkOrder/attributes/notizenEnc.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:notizenEnc + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "notizenEnc"; + dcterms:description "Fernet-encrypted ciphertext of free-form notes. Same Fernet construction as passwortEnc."; + dcterms:source "AdaWorldAPI/WoA/models.py:PasswordEntry.notizen_enc"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/orderId.ttl b/NTO/WorkOrder/attributes/orderId.ttl new file mode 100644 index 0000000000..e7c8e92b22 --- /dev/null +++ b/NTO/WorkOrder/attributes/orderId.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:orderId + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "orderId"; + dcterms:description "Public document number. The Python source carries five parallel slots (angebot_nr, auftrags_nr, workorder_nr, rechnung_nr, gutschrift_nr) plus a derived beleg_nr that picks the active one. orderId is the OGIT-side projection of beleg_nr — the human-facing identifier regardless of doc_type."; + dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.beleg_nr"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/ort.ttl b/NTO/WorkOrder/attributes/ort.ttl new file mode 100644 index 0000000000..6afde3066a --- /dev/null +++ b/NTO/WorkOrder/attributes/ort.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:ort + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "ort"; + dcterms:description "City / town (Ort)."; + dcterms:source "AdaWorldAPI/WoA/models.py:Customer.ort"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/passwordHash.ttl b/NTO/WorkOrder/attributes/passwordHash.ttl new file mode 100644 index 0000000000..55b7261583 --- /dev/null +++ b/NTO/WorkOrder/attributes/passwordHash.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:passwordHash + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "passwordHash"; + dcterms:description "Werkzeug-formatted password hash (pbkdf2:sha256:$$, max 256 chars). Legacy two-part SHA256+salt hashes are accepted on first login and transparently upgraded to pbkdf2."; + dcterms:source "AdaWorldAPI/WoA/models.py:User.password_hash"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/passwortEnc.ttl b/NTO/WorkOrder/attributes/passwortEnc.ttl new file mode 100644 index 0000000000..3a5b1a346a --- /dev/null +++ b/NTO/WorkOrder/attributes/passwortEnc.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:passwortEnc + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "passwortEnc"; + dcterms:description "Fernet-encrypted ciphertext of the password (base64-urlsafe over AES-128-CBC + HMAC-SHA256). Decryption requires the WOA_SECRET-derived key; failure produces the placeholder '*** Entschluesselung fehlgeschlagen ***'."; + dcterms:source "AdaWorldAPI/WoA/models.py:PasswordEntry.passwort_enc"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/pauseStunden.ttl b/NTO/WorkOrder/attributes/pauseStunden.ttl new file mode 100644 index 0000000000..c491d50797 --- /dev/null +++ b/NTO/WorkOrder/attributes/pauseStunden.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:pauseStunden + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "pauseStunden"; + dcterms:description "Break time in hours (Pause). Subtracted from (zeitEnde - zeitStart) when the labour total is computed."; + dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.pause_h"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/phone.ttl b/NTO/WorkOrder/attributes/phone.ttl new file mode 100644 index 0000000000..2c01f5559e --- /dev/null +++ b/NTO/WorkOrder/attributes/phone.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:phone + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "phone"; + dcterms:description "User's contact telephone number (max 100 chars)."; + dcterms:source "AdaWorldAPI/WoA/models.py:User.phone"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/plz.ttl b/NTO/WorkOrder/attributes/plz.ttl new file mode 100644 index 0000000000..0432a4b734 --- /dev/null +++ b/NTO/WorkOrder/attributes/plz.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:plz + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "plz"; + dcterms:description "Postal code (Postleitzahl)."; + dcterms:source "AdaWorldAPI/WoA/models.py:Customer.plz"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/posTyp.ttl b/NTO/WorkOrder/attributes/posTyp.ttl new file mode 100644 index 0000000000..2ff12e057b --- /dev/null +++ b/NTO/WorkOrder/attributes/posTyp.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:posTyp + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "posTyp"; + dcterms:description "Line-item type (Positionstyp): a billable row or a descriptive row."; + dcterms:source "AdaWorldAPI/WoA/models.py:Position"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/prefix.ttl b/NTO/WorkOrder/attributes/prefix.ttl new file mode 100644 index 0000000000..777f21ca09 --- /dev/null +++ b/NTO/WorkOrder/attributes/prefix.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:prefix + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "prefix"; + dcterms:description "Static string concatenated in front of the counter when minting a new number (e.g. 'AB-', 'RE-', max 10 chars)."; + dcterms:source "AdaWorldAPI/WoA/models.py:NumberSequence.prefix"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/preisNetto.ttl b/NTO/WorkOrder/attributes/preisNetto.ttl new file mode 100644 index 0000000000..e9b0b29270 --- /dev/null +++ b/NTO/WorkOrder/attributes/preisNetto.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:preisNetto + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "preisNetto"; + dcterms:description "Net selling price (Preis netto) in the tenant's currency. Float, default 0.0."; + dcterms:source "AdaWorldAPI/WoA/models.py:Article.preis_netto"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/privatAnteil.ttl b/NTO/WorkOrder/attributes/privatAnteil.ttl new file mode 100644 index 0000000000..bfd8d660d9 --- /dev/null +++ b/NTO/WorkOrder/attributes/privatAnteil.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:privatAnteil + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "privatAnteil"; + dcterms:description "Kilometers attributed to private use within this trip (float). Subtracted from the total to derive km_geschaeftlich."; + dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.privat_anteil"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/route.ttl b/NTO/WorkOrder/attributes/route.ttl new file mode 100644 index 0000000000..4ab3d3466a --- /dev/null +++ b/NTO/WorkOrder/attributes/route.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:route + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "route"; + dcterms:description "Free-text route description (e.g. 'Würzburg - Frankfurt - Würzburg', max 300 chars)."; + dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.route"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/rueckfahrt.ttl b/NTO/WorkOrder/attributes/rueckfahrt.ttl new file mode 100644 index 0000000000..96be4ed761 --- /dev/null +++ b/NTO/WorkOrder/attributes/rueckfahrt.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:rueckfahrt + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "rueckfahrt"; + dcterms:description "Return-trip departure time as HH:MM string (max 5 chars)."; + dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.rueckfahrt"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/settingKey.ttl b/NTO/WorkOrder/attributes/settingKey.ttl new file mode 100644 index 0000000000..9c600aca17 --- /dev/null +++ b/NTO/WorkOrder/attributes/settingKey.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:settingKey + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "settingKey"; + dcterms:description "Setting identifier (max 100 chars), unique per tenant. Conventionally dot-namespaced (e.g. 'company.address', 'pdf.footer')."; + dcterms:source "AdaWorldAPI/WoA/models.py:Setting.key"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/settingValue.ttl b/NTO/WorkOrder/attributes/settingValue.ttl new file mode 100644 index 0000000000..c0c032cc68 --- /dev/null +++ b/NTO/WorkOrder/attributes/settingValue.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:settingValue + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "settingValue"; + dcterms:description "Free-form text value associated with the key. Application-side code is responsible for any type coercion (int/bool/json)."; + dcterms:source "AdaWorldAPI/WoA/models.py:Setting.value"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/slug.ttl b/NTO/WorkOrder/attributes/slug.ttl new file mode 100644 index 0000000000..65924e6a2c --- /dev/null +++ b/NTO/WorkOrder/attributes/slug.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:slug + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "slug"; + dcterms:description "Unique URL-safe short identifier for the tenant (max 50 chars). Used in routing and as a stable handle independent of the numeric id."; + dcterms:source "AdaWorldAPI/WoA/models.py:Tenant.slug"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/sortOrder.ttl b/NTO/WorkOrder/attributes/sortOrder.ttl new file mode 100644 index 0000000000..505ee1ff6d --- /dev/null +++ b/NTO/WorkOrder/attributes/sortOrder.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:sortOrder + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "sortOrder"; + dcterms:description "Ordering index of a line item within its document."; + dcterms:source "AdaWorldAPI/WoA/models.py:Position"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/startKm.ttl b/NTO/WorkOrder/attributes/startKm.ttl new file mode 100644 index 0000000000..fb29c408bf --- /dev/null +++ b/NTO/WorkOrder/attributes/startKm.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:startKm + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "startKm"; + dcterms:description "Odometer reading at trip start (kilometers, float)."; + dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.start_km"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/strasse.ttl b/NTO/WorkOrder/attributes/strasse.ttl new file mode 100644 index 0000000000..da4d776e11 --- /dev/null +++ b/NTO/WorkOrder/attributes/strasse.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:strasse + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "strasse"; + dcterms:description "Street and house number (Strasse)."; + dcterms:source "AdaWorldAPI/WoA/models.py:Customer.strasse"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/stundensatz.ttl b/NTO/WorkOrder/attributes/stundensatz.ttl new file mode 100644 index 0000000000..707d4be401 --- /dev/null +++ b/NTO/WorkOrder/attributes/stundensatz.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:stundensatz + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "stundensatz"; + dcterms:description "Hourly rate (Stundensatz) in the tenant's currency, used by labour line items. Float, default 60.0."; + dcterms:source "AdaWorldAPI/WoA/models.py:Customer.stundensatz"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/taxId.ttl b/NTO/WorkOrder/attributes/taxId.ttl new file mode 100644 index 0000000000..02bd54554a --- /dev/null +++ b/NTO/WorkOrder/attributes/taxId.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:taxId + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "taxId"; + dcterms:description "Tax identification number (USt-IdNr / Steuernummer). Optional; reserved attribute for the OGIT projection of customer billing data."; + dcterms:source "AdaWorldAPI/WoA/models.py:Customer"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/telefon.ttl b/NTO/WorkOrder/attributes/telefon.ttl new file mode 100644 index 0000000000..fb22fe570e --- /dev/null +++ b/NTO/WorkOrder/attributes/telefon.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:telefon + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "telefon"; + dcterms:description "Telephone number (Telefon) of the customer. Free-form string; no E.164 normalization is enforced by the source model."; + dcterms:source "AdaWorldAPI/WoA/models.py:Customer.telefon"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/timerStart.ttl b/NTO/WorkOrder/attributes/timerStart.ttl new file mode 100644 index 0000000000..2bcf8ae4da --- /dev/null +++ b/NTO/WorkOrder/attributes/timerStart.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:timerStart + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "timerStart"; + dcterms:description "ISO-8601 UTC timestamp marking when a live timer was started for this entry. Null when not currently running."; + dcterms:source "AdaWorldAPI/WoA/models.py:TimeSheet.timer_start"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/titel.ttl b/NTO/WorkOrder/attributes/titel.ttl new file mode 100644 index 0000000000..752b253c91 --- /dev/null +++ b/NTO/WorkOrder/attributes/titel.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:titel + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "titel"; + dcterms:description "Display title for the entry (max 200 chars). Mandatory."; + dcterms:source "AdaWorldAPI/WoA/models.py:PasswordEntry.titel"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/unterschrift.ttl b/NTO/WorkOrder/attributes/unterschrift.ttl new file mode 100644 index 0000000000..7f9667bd23 --- /dev/null +++ b/NTO/WorkOrder/attributes/unterschrift.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:unterschrift + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "unterschrift"; + dcterms:description "Customer signature blob (Unterschrift). Base64-encoded bitmap captured at on-site checkout; not printed in PDF rendering by default."; + dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.unterschrift"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/updatedAt.ttl b/NTO/WorkOrder/attributes/updatedAt.ttl new file mode 100644 index 0000000000..3f6c75dae7 --- /dev/null +++ b/NTO/WorkOrder/attributes/updatedAt.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:updatedAt + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "updatedAt"; + dcterms:description "ISO-8601 UTC timestamp of the most recent persisted update to the record."; + dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.updated_at", "AdaWorldAPI/WoA/models.py"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/url.ttl b/NTO/WorkOrder/attributes/url.ttl new file mode 100644 index 0000000000..a12b4c0fae --- /dev/null +++ b/NTO/WorkOrder/attributes/url.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:url + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "url"; + dcterms:description "URL of the protected resource (max 500 chars), stored in plaintext."; + dcterms:source "AdaWorldAPI/WoA/models.py:PasswordEntry.url"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/username.ttl b/NTO/WorkOrder/attributes/username.ttl new file mode 100644 index 0000000000..d10a807254 --- /dev/null +++ b/NTO/WorkOrder/attributes/username.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:username + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "username"; + dcterms:description "Globally unique login handle (max 120 chars). Primary credential identifier used for password authentication."; + dcterms:source "AdaWorldAPI/WoA/models.py:User.username"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/versteckt.ttl b/NTO/WorkOrder/attributes/versteckt.ttl new file mode 100644 index 0000000000..959291c32a --- /dev/null +++ b/NTO/WorkOrder/attributes/versteckt.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:versteckt + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "versteckt"; + dcterms:description "Hidden flag (versteckt). Boolean; true omits the line item from the printed document."; + dcterms:source "AdaWorldAPI/WoA/models.py:Position"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/vorname.ttl b/NTO/WorkOrder/attributes/vorname.ttl new file mode 100644 index 0000000000..cbf70effcf --- /dev/null +++ b/NTO/WorkOrder/attributes/vorname.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:vorname + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "vorname"; + dcterms:description "Given name (Vorname) of the contact person."; + dcterms:source "AdaWorldAPI/WoA/models.py:Customer.vorname"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/zahlungsziel.ttl b/NTO/WorkOrder/attributes/zahlungsziel.ttl new file mode 100644 index 0000000000..9bcbf98381 --- /dev/null +++ b/NTO/WorkOrder/attributes/zahlungsziel.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:zahlungsziel + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "zahlungsziel"; + dcterms:description "Payment term (Zahlungsziel) in days; default 14. Drives the faellig_am derivation on Order."; + dcterms:source "AdaWorldAPI/WoA/models.py:Customer.zahlungsziel"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/zeitEnde.ttl b/NTO/WorkOrder/attributes/zeitEnde.ttl new file mode 100644 index 0000000000..5c55849225 --- /dev/null +++ b/NTO/WorkOrder/attributes/zeitEnde.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:zeitEnde + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "zeitEnde"; + dcterms:description "Engagement end (Zeit Ende). End of the on-site / labour window for this Order; ISO-8601 timestamp."; + dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.zeit_ende"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/zeitStart.ttl b/NTO/WorkOrder/attributes/zeitStart.ttl new file mode 100644 index 0000000000..bcd1e8394a --- /dev/null +++ b/NTO/WorkOrder/attributes/zeitStart.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:zeitStart + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "zeitStart"; + dcterms:description "Engagement start (Zeit Start). Begin of the on-site / labour window for this Order; ISO-8601 timestamp."; + dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.zeit_start"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/zurueck.ttl b/NTO/WorkOrder/attributes/zurueck.ttl new file mode 100644 index 0000000000..efdae9d981 --- /dev/null +++ b/NTO/WorkOrder/attributes/zurueck.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:zurueck + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "zurueck"; + dcterms:description "Return-trip arrival time as HH:MM string (max 5 chars)."; + dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.zurueck"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/zusatzStunden.ttl b/NTO/WorkOrder/attributes/zusatzStunden.ttl new file mode 100644 index 0000000000..de1c37f6c6 --- /dev/null +++ b/NTO/WorkOrder/attributes/zusatzStunden.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:zusatzStunden + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "zusatzStunden"; + dcterms:description "Extra hours (Zusatzstunden) added on top of the (zeitEnde - zeitStart - pauseStunden) computation. Used for after-hours work or punch-list additions."; + dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.zusatz_h"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/attributes/zweck.ttl b/NTO/WorkOrder/attributes/zweck.ttl new file mode 100644 index 0000000000..5623138f03 --- /dev/null +++ b/NTO/WorkOrder/attributes/zweck.ttl @@ -0,0 +1,15 @@ +@prefix ogit.WorkOrder: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.WorkOrder:zweck + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "zweck"; + dcterms:description "Business purpose of the trip (max 300 chars). Required by German tax law for the Fahrtenbuch."; + dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.zweck"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; +. diff --git a/NTO/WorkOrder/entities/Activity.ttl b/NTO/WorkOrder/entities/Activity.ttl index 075b2faa7e..27be2d1a5f 100644 --- a/NTO/WorkOrder/entities/Activity.ttl +++ b/NTO/WorkOrder/entities/Activity.ttl @@ -8,6 +8,7 @@ ogit.WorkOrder:Activity a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "Activity"; + dcterms:valid "start=2026-10-10;"; dcterms:description "A logged work activity attached to a WorkOrder. Carries optional device/asset reference (geraet), free-text description, logbook flag (export to driver/work logbook), internal-only flag, and creation timestamp. One Activity per discrete on-site or remote action."; dcterms:source "AdaWorldAPI/WoA/models.py:Activity"; dcterms:creator "family-codec-smith"; @@ -21,10 +22,10 @@ ogit.WorkOrder:Activity ogit.WorkOrder:beschreibung ogit.WorkOrder:logbuch ogit.WorkOrder:intern - ogit:created-at + ogit:createdAt ); ogit:indexed-attributes ( - ogit:created-at + ogit:createdAt ); ogit:allowed ( [ ogit:belongs ogit.WorkOrder:Order ] diff --git a/NTO/WorkOrder/entities/Article.ttl b/NTO/WorkOrder/entities/Article.ttl index 2e7b3cdaa3..d26d364753 100644 --- a/NTO/WorkOrder/entities/Article.ttl +++ b/NTO/WorkOrder/entities/Article.ttl @@ -7,6 +7,8 @@ ogit.WorkOrder:Article a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "Article"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; dcterms:description "Article master-data record (Artikelstamm / WaWi). Referenced by Position rows on an Order via article_id. Carries selling and purchase prices, VAT rate and supplier reference; derived margin (marge / marge_pct) is computed on demand by the Python model."; dcterms:source "AdaWorldAPI/WoA/models.py:Article"; ogit:scope "NTO"; @@ -32,61 +34,3 @@ ogit.WorkOrder:Article [ ogit:belongs ogit.WorkOrder:Tenant ] ); . - -# ── attributes ─────────────────────────────────────────────────────────── - -ogit.WorkOrder:artikelnr - a rdfs:Property; - rdfs:label "artikelnr"; - dcterms:description "Article number (Artikelnummer). Tenant-local short code used on invoices, lookup forms and inventory listings."; - dcterms:source "AdaWorldAPI/WoA/models.py:Article.artikelnr"; -. - -ogit.WorkOrder:beschreibung - a rdfs:Property; - rdfs:label "beschreibung"; - dcterms:description "Article description (Beschreibung) printed on order positions. Mandatory in the source model."; - dcterms:source "AdaWorldAPI/WoA/models.py:Article.beschreibung"; -. - -ogit.WorkOrder:preisNetto - a rdfs:Property; - rdfs:label "preisNetto"; - dcterms:description "Net selling price (Preis netto) in the tenant's currency. Float, default 0.0."; - dcterms:source "AdaWorldAPI/WoA/models.py:Article.preis_netto"; -. - -ogit.WorkOrder:ekPreis - a rdfs:Property; - rdfs:label "ekPreis"; - dcterms:description "Purchase price (Einkaufspreis) used for margin calculation against preisNetto."; - dcterms:source "AdaWorldAPI/WoA/models.py:Article.ek_preis"; -. - -ogit.WorkOrder:mwstSatz - a rdfs:Property; - rdfs:label "mwstSatz"; - dcterms:description "VAT rate (MwSt-Satz) in percent applied when this article appears as a position. Float, default 19.0."; - dcterms:source "AdaWorldAPI/WoA/models.py:Article.mwst_satz"; -. - -ogit.WorkOrder:lieferant - a rdfs:Property; - rdfs:label "lieferant"; - dcterms:description "Supplier name (Lieferant) the article is normally sourced from. Free-form string; not a relation to a separate Supplier class in the current source."; - dcterms:source "AdaWorldAPI/WoA/models.py:Article.lieferant"; -. - -ogit.WorkOrder:lieferantAnr - a rdfs:Property; - rdfs:label "lieferantAnr"; - dcterms:description "Supplier-side article number (Lieferanten-Artikelnummer). Used when reordering: the artikelnr is the tenant-local code, lieferantAnr is the SKU at the supplier."; - dcterms:source "AdaWorldAPI/WoA/models.py:Article.lieferant_anr"; -. - -ogit.WorkOrder:aktiv - a rdfs:Property; - rdfs:label "aktiv"; - dcterms:description "Active flag (aktiv). Boolean; false hides the article from the new-position picker without deleting historical references. Default true."; - dcterms:source "AdaWorldAPI/WoA/models.py:Article.aktiv"; -. diff --git a/NTO/WorkOrder/entities/Customer.ttl b/NTO/WorkOrder/entities/Customer.ttl index 4785542a16..360299183b 100644 --- a/NTO/WorkOrder/entities/Customer.ttl +++ b/NTO/WorkOrder/entities/Customer.ttl @@ -7,6 +7,8 @@ ogit.WorkOrder:Customer a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "Customer"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; dcterms:description "Customer (Kunde) of a WoA tenant. Holds postal address, billing parameters (Zahlungsziel, Stundensatz) and is the parent of all work orders, time sheets and password-vault entries belonging to that customer."; dcterms:source "AdaWorldAPI/WoA/models.py:Customer"; ogit:scope "NTO"; @@ -46,145 +48,3 @@ ogit.WorkOrder:Customer [ ogit:belongs ogit.WorkOrder:Tenant ] ); . - -# ── attributes ─────────────────────────────────────────────────────────── - -ogit.WorkOrder:kdnr - a rdfs:Property; - rdfs:label "kdnr"; - dcterms:description "Customer number (Kundennummer). Tenant-local short code used on invoices and in correspondence."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer.kdnr"; -. - -ogit.WorkOrder:firma - a rdfs:Property; - rdfs:label "firma"; - dcterms:description "Company name (Firma). Empty for private customers; in that case display falls back to vorname + nachname."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer.firma"; -. - -ogit.WorkOrder:vorname - a rdfs:Property; - rdfs:label "vorname"; - dcterms:description "Given name (Vorname) of the contact person."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer.vorname"; -. - -ogit.WorkOrder:nachname - a rdfs:Property; - rdfs:label "nachname"; - dcterms:description "Family name (Nachname) of the contact person."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer.nachname"; -. - -ogit.WorkOrder:telefon - a rdfs:Property; - rdfs:label "telefon"; - dcterms:description "Telephone number (Telefon) of the customer. Free-form string; no E.164 normalization is enforced by the source model."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer.telefon"; -. - -ogit.WorkOrder:strasse - a rdfs:Property; - rdfs:label "strasse"; - dcterms:description "Street and house number (Strasse)."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer.strasse"; -. - -ogit.WorkOrder:plz - a rdfs:Property; - rdfs:label "plz"; - dcterms:description "Postal code (Postleitzahl)."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer.plz"; -. - -ogit.WorkOrder:ort - a rdfs:Property; - rdfs:label "ort"; - dcterms:description "City / town (Ort)."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer.ort"; -. - -ogit.WorkOrder:iban - a rdfs:Property; - rdfs:label "iban"; - dcterms:description "International Bank Account Number for SEPA payments. Optional; not modelled as a column in the current Python source but reserved here for the OGIT projection."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer"; -. - -ogit.WorkOrder:taxId - a rdfs:Property; - rdfs:label "taxId"; - dcterms:description "Tax identification number (USt-IdNr / Steuernummer). Optional; reserved attribute for the OGIT projection of customer billing data."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer"; -. - -ogit.WorkOrder:zahlungsziel - a rdfs:Property; - rdfs:label "zahlungsziel"; - dcterms:description "Payment term (Zahlungsziel) in days; default 14. Drives the faellig_am derivation on Order."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer.zahlungsziel"; -. - -ogit.WorkOrder:stundensatz - a rdfs:Property; - rdfs:label "stundensatz"; - dcterms:description "Hourly rate (Stundensatz) in the tenant's currency, used by labour line items. Float, default 60.0."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer.stundensatz"; -. - -ogit.WorkOrder:anrede - a rdfs:Property; - rdfs:label "anrede"; - dcterms:description "Form of address (Anrede). One of: Herr, Frau, Firma. Drives salutation rendering on the document."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer.anrede"; -. - -ogit.WorkOrder:mailAnrede - a rdfs:Property; - rdfs:label "mailAnrede"; - dcterms:description "Email salutation override (mail_anrede). Free-text override for the opening line of automated mails (e.g. 'Sehr geehrte Frau Mueller'). When empty, derived from anrede + nachname."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer.mail_anrede"; -. - -ogit.WorkOrder:adresszusatz - a rdfs:Property; - rdfs:label "adresszusatz"; - dcterms:description "Address line 2 (Adresszusatz). Optional second address line for c/o, building, suite, etc."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer.adresszusatz"; -. - -ogit.WorkOrder:fahrtKm - a rdfs:Property; - rdfs:label "fahrtKm"; - dcterms:description "One-way travel distance in kilometres (Fahrt km). Multiplied by Order.anfahrten and fahrtKosten to compute the trip-cost line item."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer.fahrt_km"; -. - -ogit.WorkOrder:fahrtKosten - a rdfs:Property; - rdfs:label "fahrtKosten"; - dcterms:description "Per-kilometre travel cost in the tenant's currency (Fahrt Kosten). Float; default 0.0. Used together with fahrtKm and Order.anfahrten to compute trip-cost line items."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer.fahrt_kosten"; -. - -ogit.WorkOrder:notizen - a rdfs:Property; - rdfs:label "notizen"; - dcterms:description "Free-text customer notes (Notizen). Internal-only; not printed on customer-facing documents. Distinct from Order.notizen which is per-order."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer.notizen"; -. - -ogit.WorkOrder:aktiv - a rdfs:Property; - rdfs:label "aktiv"; - dcterms:description "Active flag (aktiv). Boolean; false marks the customer as archived. The Python views filter on aktiv = true for the default customer list."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer.aktiv"; -. - -ogit.WorkOrder:createdAt - a rdfs:Property; - rdfs:label "createdAt"; - dcterms:description "Customer row creation timestamp. ISO-8601, set on first insert. Mirrors the global ogit:created-at semantically; declared workspace-scoped to keep the projection consistent across WoA entities."; - dcterms:source "AdaWorldAPI/WoA/models.py:Customer.created_at"; -. diff --git a/NTO/WorkOrder/entities/CustomerPortalUser.ttl b/NTO/WorkOrder/entities/CustomerPortalUser.ttl index d86fd7b8e1..aa72dabfd4 100644 --- a/NTO/WorkOrder/entities/CustomerPortalUser.ttl +++ b/NTO/WorkOrder/entities/CustomerPortalUser.ttl @@ -8,6 +8,7 @@ ogit.WorkOrder:CustomerPortalUser a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "CustomerPortalUser"; + dcterms:valid "start=2026-10-10;"; dcterms:description "External self-service portal login bound to exactly one Customer. Authenticates via the same werkzeug pbkdf2:sha256 scheme as the internal User (with legacy SHA256+salt fallback and transparent upgrade), but has NO admin/superadmin scope. Used by customers to view their own work orders, invoices, and pay-status. Tracks last-login for audit, and carries an active-flag for soft-disabling and a forced-password-change marker."; dcterms:source "AdaWorldAPI/WoA/models.py:CustomerPortalUser"; dcterms:creator "bus-compiler"; @@ -31,12 +32,3 @@ ogit.WorkOrder:CustomerPortalUser [ ogit:belongs ogit.WorkOrder:Customer ] ); . - -# ── attributes ─────────────────────────────────────────────────────────── - -ogit.WorkOrder:lastLogin - a rdfs:Property; - rdfs:label "lastLogin"; - dcterms:description "ISO-8601 UTC timestamp of the most recent successful portal login. Null on accounts that have never signed in."; - dcterms:source "AdaWorldAPI/WoA/models.py:CustomerPortalUser.last_login"; -. diff --git a/NTO/WorkOrder/entities/HistoryEntry.ttl b/NTO/WorkOrder/entities/HistoryEntry.ttl index e578f61f45..8dc6b1d94b 100644 --- a/NTO/WorkOrder/entities/HistoryEntry.ttl +++ b/NTO/WorkOrder/entities/HistoryEntry.ttl @@ -8,6 +8,7 @@ ogit.WorkOrder:HistoryEntry a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "HistoryEntry"; + dcterms:valid "start=2026-10-10;"; dcterms:description "An immutable audit/log row for a WorkOrder. Records an action label (aktion), free-text details, the User who performed the action, and a creation timestamp. Append-only: every state change to an Order should produce one HistoryEntry."; dcterms:source "AdaWorldAPI/WoA/models.py:HistoryEntry"; dcterms:creator "family-codec-smith"; @@ -19,10 +20,10 @@ ogit.WorkOrder:HistoryEntry ogit:optional-attributes ( ogit.WorkOrder:aktion ogit.WorkOrder:details - ogit:created-at + ogit:createdAt ); ogit:indexed-attributes ( - ogit:created-at + ogit:createdAt ogit.WorkOrder:aktion ); ogit:allowed ( diff --git a/NTO/WorkOrder/entities/LogbookEntry.ttl b/NTO/WorkOrder/entities/LogbookEntry.ttl index 24b0cc1dea..3a58bac1f0 100644 --- a/NTO/WorkOrder/entities/LogbookEntry.ttl +++ b/NTO/WorkOrder/entities/LogbookEntry.ttl @@ -8,6 +8,7 @@ ogit.WorkOrder:LogbookEntry a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "LogbookEntry"; + dcterms:valid "start=2026-10-10;"; dcterms:description "A driving-logbook (Fahrtenbuch) row capturing one trip: start/end odometer reading, departure/arrival times, route description, business purpose, vehicle, and the private-share kilometers split out for tax purposes. Optionally references a User (driver), Customer (visited), and Order (the work-order driven for)."; dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry"; dcterms:creator "bus-compiler"; @@ -39,82 +40,3 @@ ogit.WorkOrder:LogbookEntry [ ogit:relates ogit.WorkOrder:Order ] ); . - -# ── attributes ─────────────────────────────────────────────────────────── - -ogit.WorkOrder:datum - a rdfs:Property; - rdfs:label "datum"; - dcterms:description "ISO-8601 calendar date the trip took place (mandatory; defaults to today on insert)."; - dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.datum"; -. - -ogit.WorkOrder:abfahrt - a rdfs:Property; - rdfs:label "abfahrt"; - dcterms:description "Departure time as HH:MM string (max 5 chars)."; - dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.abfahrt"; -. - -ogit.WorkOrder:ankunft - a rdfs:Property; - rdfs:label "ankunft"; - dcterms:description "Arrival time at destination as HH:MM string (max 5 chars)."; - dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.ankunft"; -. - -ogit.WorkOrder:rueckfahrt - a rdfs:Property; - rdfs:label "rueckfahrt"; - dcterms:description "Return-trip departure time as HH:MM string (max 5 chars)."; - dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.rueckfahrt"; -. - -ogit.WorkOrder:zurueck - a rdfs:Property; - rdfs:label "zurueck"; - dcterms:description "Return-trip arrival time as HH:MM string (max 5 chars)."; - dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.zurueck"; -. - -ogit.WorkOrder:startKm - a rdfs:Property; - rdfs:label "startKm"; - dcterms:description "Odometer reading at trip start (kilometers, float)."; - dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.start_km"; -. - -ogit.WorkOrder:endeKm - a rdfs:Property; - rdfs:label "endeKm"; - dcterms:description "Odometer reading at trip end (kilometers, float). The trip's total distance is end_km - start_km."; - dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.ende_km"; -. - -ogit.WorkOrder:route - a rdfs:Property; - rdfs:label "route"; - dcterms:description "Free-text route description (e.g. 'Würzburg - Frankfurt - Würzburg', max 300 chars)."; - dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.route"; -. - -ogit.WorkOrder:zweck - a rdfs:Property; - rdfs:label "zweck"; - dcterms:description "Business purpose of the trip (max 300 chars). Required by German tax law for the Fahrtenbuch."; - dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.zweck"; -. - -ogit.WorkOrder:fahrzeug - a rdfs:Property; - rdfs:label "fahrzeug"; - dcterms:description "Vehicle identifier (license plate or fleet name, max 100 chars)."; - dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.fahrzeug"; -. - -ogit.WorkOrder:privatAnteil - a rdfs:Property; - rdfs:label "privatAnteil"; - dcterms:description "Kilometers attributed to private use within this trip (float). Subtracted from the total to derive km_geschaeftlich."; - dcterms:source "AdaWorldAPI/WoA/models.py:LogbookEntry.privat_anteil"; -. diff --git a/NTO/WorkOrder/entities/NumberSequence.ttl b/NTO/WorkOrder/entities/NumberSequence.ttl index 56d9c45cf5..decf2eb8f4 100644 --- a/NTO/WorkOrder/entities/NumberSequence.ttl +++ b/NTO/WorkOrder/entities/NumberSequence.ttl @@ -8,6 +8,7 @@ ogit.WorkOrder:NumberSequence a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "NumberSequence"; + dcterms:valid "start=2026-10-10;"; dcterms:description "Per-tenant atomic counter used to mint sequential business document numbers (offer-, order-, invoice-, credit-numbers). Each sequence has a stable name (the sequence kind), an optional prefix, and a monotonically incrementing 'current' integer; next_val() increments the counter and concatenates prefix + current to produce the next document number."; dcterms:source "AdaWorldAPI/WoA/models.py:NumberSequence"; dcterms:creator "bus-compiler"; @@ -28,19 +29,3 @@ ogit.WorkOrder:NumberSequence [ ogit:belongs ogit.WorkOrder:Tenant ] ); . - -# ── attributes ─────────────────────────────────────────────────────────── - -ogit.WorkOrder:prefix - a rdfs:Property; - rdfs:label "prefix"; - dcterms:description "Static string concatenated in front of the counter when minting a new number (e.g. 'AB-', 'RE-', max 10 chars)."; - dcterms:source "AdaWorldAPI/WoA/models.py:NumberSequence.prefix"; -. - -ogit.WorkOrder:current - a rdfs:Property; - rdfs:label "current"; - dcterms:description "Monotonically increasing integer holding the most-recently-issued counter value. Incremented in-place by next_val() inside a database transaction."; - dcterms:source "AdaWorldAPI/WoA/models.py:NumberSequence.current"; -. diff --git a/NTO/WorkOrder/entities/Order.ttl b/NTO/WorkOrder/entities/Order.ttl index 0422834d58..2ae5168630 100644 --- a/NTO/WorkOrder/entities/Order.ttl +++ b/NTO/WorkOrder/entities/Order.ttl @@ -7,6 +7,8 @@ ogit.WorkOrder:Order a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "Order"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; dcterms:description "Central work-order document of WoA. A single SQLAlchemy table 'workorders' represents five doc_type variants — workorder (Arbeitsauftrag), offer (Angebot), order (Auftrag), invoice (Rechnung), credit (Gutschrift). The doc_type column selects the variant; OGIT consumers should treat 'Order' as the umbrella class and filter by doc_type for variant-specific logic. Holds positions, activities, pictures and history as child collections, and exposes derived totals netto_summe / mwst_betrag / brutto_summe."; dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder"; ogit:scope "NTO"; @@ -51,159 +53,3 @@ ogit.WorkOrder:Order [ ogit:relates ogit.WorkOrder:Article ] ); . - -# ── attributes ─────────────────────────────────────────────────────────── - -ogit.WorkOrder:orderId - a rdfs:Property; - rdfs:label "orderId"; - dcterms:description "Public document number. The Python source carries five parallel slots (angebot_nr, auftrags_nr, workorder_nr, rechnung_nr, gutschrift_nr) plus a derived beleg_nr that picks the active one. orderId is the OGIT-side projection of beleg_nr — the human-facing identifier regardless of doc_type."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.beleg_nr"; -. - -ogit.WorkOrder:docType - a rdfs:Property; - rdfs:label "docType"; - dcterms:description "Discriminator for the document variant. One of: workorder, offer, order, invoice, credit. Mirrors WorkOrder.doc_type in the source."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.doc_type"; -. - -ogit.WorkOrder:datum - a rdfs:Property; - rdfs:label "datum"; - dcterms:description "Document date (Datum). ISO-8601 date; defaults to creation day. Drives the dunning / due-date derivations."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.datum"; -. - -ogit.WorkOrder:betreff - a rdfs:Property; - rdfs:label "betreff"; - dcterms:description "Subject / heading line (Betreff) printed at the top of the document."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.betreff"; -. - -ogit.WorkOrder:nettoSumme - a rdfs:Property; - rdfs:label "nettoSumme"; - dcterms:description "Net total (Netto-Summe). Derived in Python as sum(menge × einzelpreis) over all positions; materialised on the OGIT projection."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.netto_summe"; -. - -ogit.WorkOrder:mwstBetrag - a rdfs:Property; - rdfs:label "mwstBetrag"; - dcterms:description "VAT amount (MwSt-Betrag). Derived in Python as sum(menge × einzelpreis × mwst_satz / 100) over all positions."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.mwst_betrag"; -. - -ogit.WorkOrder:bruttoSumme - a rdfs:Property; - rdfs:label "bruttoSumme"; - dcterms:description "Gross total (Brutto-Summe) = nettoSumme + mwstBetrag."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.brutto_summe"; -. - -ogit.WorkOrder:bezahlt - a rdfs:Property; - rdfs:label "bezahlt"; - dcterms:description "Payment-received flag. Boolean; true once the order has been settled by the customer."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.bezahlt"; -. - -ogit.WorkOrder:zeitStart - a rdfs:Property; - rdfs:label "zeitStart"; - dcterms:description "Engagement start (Zeit Start). Begin of the on-site / labour window for this Order; ISO-8601 timestamp."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.zeit_start"; -. - -ogit.WorkOrder:zeitEnde - a rdfs:Property; - rdfs:label "zeitEnde"; - dcterms:description "Engagement end (Zeit Ende). End of the on-site / labour window for this Order; ISO-8601 timestamp."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.zeit_ende"; -. - -ogit.WorkOrder:anfahrten - a rdfs:Property; - rdfs:label "anfahrten"; - dcterms:description "Number of approach trips (Anfahrten) charged to the Order. Integer count used by the trip-cost derivation against Customer.fahrtKm / fahrtKosten."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.anfahrten"; -. - -ogit.WorkOrder:mitarbeiter - a rdfs:Property; - rdfs:label "mitarbeiter"; - dcterms:description "Crew on site (Mitarbeiter). Free-form short label or comma-separated names; the Python source keeps it as a string column rather than a User-relation join because crew composition is often informal."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.mitarbeiter"; -. - -ogit.WorkOrder:pauseStunden - a rdfs:Property; - rdfs:label "pauseStunden"; - dcterms:description "Break time in hours (Pause). Subtracted from (zeitEnde - zeitStart) when the labour total is computed."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.pause_h"; -. - -ogit.WorkOrder:zusatzStunden - a rdfs:Property; - rdfs:label "zusatzStunden"; - dcterms:description "Extra hours (Zusatzstunden) added on top of the (zeitEnde - zeitStart - pauseStunden) computation. Used for after-hours work or punch-list additions."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.zusatz_h"; -. - -ogit.WorkOrder:notizen - a rdfs:Property; - rdfs:label "notizen"; - dcterms:description "Customer-facing notes (Notizen). Free-text block printed on the document below the position list."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.notizen"; -. - -ogit.WorkOrder:internNotizen - a rdfs:Property; - rdfs:label "internNotizen"; - dcterms:description "Internal notes (interne Notizen). Free-text block visible only to staff; never printed on the customer-facing document."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.intern_notizen"; -. - -ogit.WorkOrder:bezahltAm - a rdfs:Property; - rdfs:label "bezahltAm"; - dcterms:description "Payment date (bezahlt am). ISO-8601 date set when the bezahlt flag is flipped from false to true. Drives the close-of-books reconciliation."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.bezahlt_am"; -. - -ogit.WorkOrder:mahnstufe - a rdfs:Property; - rdfs:label "mahnstufe"; - dcterms:description "Dunning level (Mahnstufe). Integer 0-3: 0 = nothing sent, 1-3 = three escalation tiers per the Mahnwesen workflow."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.mahnstufe"; -. - -ogit.WorkOrder:letzteMahnung - a rdfs:Property; - rdfs:label "letzteMahnung"; - dcterms:description "Date of the most recent dunning notice (letzte Mahnung). ISO-8601 date, advanced when mahnstufe is incremented."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.letzte_mahnung"; -. - -ogit.WorkOrder:unterschrift - a rdfs:Property; - rdfs:label "unterschrift"; - dcterms:description "Customer signature blob (Unterschrift). Base64-encoded bitmap captured at on-site checkout; not printed in PDF rendering by default."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.unterschrift"; -. - -ogit.WorkOrder:createdAt - a rdfs:Property; - rdfs:label "createdAt"; - dcterms:description "Order row creation timestamp. ISO-8601, set on first insert. Distinct from datum (the document's effective date)."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.created_at"; -. - -ogit.WorkOrder:updatedAt - a rdfs:Property; - rdfs:label "updatedAt"; - dcterms:description "Order row last-modified timestamp. ISO-8601, advanced on every UPDATE. Distinct from datum and bezahltAm."; - dcterms:source "AdaWorldAPI/WoA/models.py:WorkOrder.updated_at"; -. diff --git a/NTO/WorkOrder/entities/PasswordEntry.ttl b/NTO/WorkOrder/entities/PasswordEntry.ttl index 695f8d6179..12e5167da7 100644 --- a/NTO/WorkOrder/entities/PasswordEntry.ttl +++ b/NTO/WorkOrder/entities/PasswordEntry.ttl @@ -8,6 +8,7 @@ ogit.WorkOrder:PasswordEntry a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "PasswordEntry"; + dcterms:valid "start=2026-10-10;"; dcterms:description "KeePass-style encrypted vault entry stored against a Customer (the resource being accessed) and authored by a User. Sensitive fields (passwort_enc, notizen_enc) are encrypted at rest using Fernet (AES-128-CBC + HMAC-SHA256), with the symmetric key derived from the WOA_SECRET environment variable via SHA-256. WOA_SECRET MUST be set (>= 32 chars); the application refuses to encrypt or decrypt without it. Non-secret metadata (group, title, username, url, icon) is stored in plaintext for searchability."; dcterms:source "AdaWorldAPI/WoA/models.py:PasswordEntry"; dcterms:creator "bus-compiler"; @@ -38,54 +39,3 @@ ogit.WorkOrder:PasswordEntry [ ogit:relates ogit.WorkOrder:User ] ); . - -# ── attributes ─────────────────────────────────────────────────────────── - -ogit.WorkOrder:gruppe - a rdfs:Property; - rdfs:label "gruppe"; - dcterms:description "Vault folder/category (max 100 chars, default 'Allgemein'). Free-form grouping used to organise entries in the UI tree."; - dcterms:source "AdaWorldAPI/WoA/models.py:PasswordEntry.gruppe"; -. - -ogit.WorkOrder:titel - a rdfs:Property; - rdfs:label "titel"; - dcterms:description "Display title for the entry (max 200 chars). Mandatory."; - dcterms:source "AdaWorldAPI/WoA/models.py:PasswordEntry.titel"; -. - -ogit.WorkOrder:benutzername - a rdfs:Property; - rdfs:label "benutzername"; - dcterms:description "Plaintext account-username for the resource (max 200 chars). NOT encrypted — only the password and notes carry sensitive material."; - dcterms:source "AdaWorldAPI/WoA/models.py:PasswordEntry.benutzername"; -. - -ogit.WorkOrder:passwortEnc - a rdfs:Property; - rdfs:label "passwortEnc"; - dcterms:description "Fernet-encrypted ciphertext of the password (base64-urlsafe over AES-128-CBC + HMAC-SHA256). Decryption requires the WOA_SECRET-derived key; failure produces the placeholder '*** Entschluesselung fehlgeschlagen ***'."; - dcterms:source "AdaWorldAPI/WoA/models.py:PasswordEntry.passwort_enc"; -. - -ogit.WorkOrder:url - a rdfs:Property; - rdfs:label "url"; - dcterms:description "URL of the protected resource (max 500 chars), stored in plaintext."; - dcterms:source "AdaWorldAPI/WoA/models.py:PasswordEntry.url"; -. - -ogit.WorkOrder:notizenEnc - a rdfs:Property; - rdfs:label "notizenEnc"; - dcterms:description "Fernet-encrypted ciphertext of free-form notes. Same Fernet construction as passwortEnc."; - dcterms:source "AdaWorldAPI/WoA/models.py:PasswordEntry.notizen_enc"; -. - -ogit.WorkOrder:icon - a rdfs:Property; - rdfs:label "icon"; - dcterms:description "Icon glyph name (max 50 chars, default 'key') used by the UI to render the entry visually."; - dcterms:source "AdaWorldAPI/WoA/models.py:PasswordEntry.icon"; -. diff --git a/NTO/WorkOrder/entities/Picture.ttl b/NTO/WorkOrder/entities/Picture.ttl index c54d3781de..d240affcfd 100644 --- a/NTO/WorkOrder/entities/Picture.ttl +++ b/NTO/WorkOrder/entities/Picture.ttl @@ -8,6 +8,7 @@ ogit.WorkOrder:Picture a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "Picture"; + dcterms:valid "start=2026-10-10;"; dcterms:description "An image/document attachment on a WorkOrder. Carries the stored filename (dateiname), an optional caption (beschreibung), a logbook flag (include in driver/work logbook export), an an_kunde flag (visible to / send to customer), and a creation timestamp."; dcterms:source "AdaWorldAPI/WoA/models.py:Picture"; dcterms:creator "family-codec-smith"; @@ -21,10 +22,10 @@ ogit.WorkOrder:Picture ogit.WorkOrder:beschreibung ogit.WorkOrder:logbuch ogit.WorkOrder:anKunde - ogit:created-at + ogit:createdAt ); ogit:indexed-attributes ( - ogit:created-at + ogit:createdAt ); ogit:allowed ( [ ogit:belongs ogit.WorkOrder:Order ] diff --git a/NTO/WorkOrder/entities/Position.ttl b/NTO/WorkOrder/entities/Position.ttl index 042d12711d..a0e66c7fdd 100644 --- a/NTO/WorkOrder/entities/Position.ttl +++ b/NTO/WorkOrder/entities/Position.ttl @@ -8,6 +8,7 @@ ogit.WorkOrder:Position a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "Position"; + dcterms:valid "start=2026-10-10;"; dcterms:description "A line item (Position) on a WorkOrder/Order document. Represents one billable or descriptive row carrying quantity, unit, unit-price, VAT rate, optional Article reference, and ordering. Used across offer/order/invoice/credit doc types."; dcterms:source "AdaWorldAPI/WoA/models.py:Position"; dcterms:creator "family-codec-smith"; diff --git a/NTO/WorkOrder/entities/Setting.ttl b/NTO/WorkOrder/entities/Setting.ttl index b62d6fc424..07fccdac77 100644 --- a/NTO/WorkOrder/entities/Setting.ttl +++ b/NTO/WorkOrder/entities/Setting.ttl @@ -8,6 +8,7 @@ ogit.WorkOrder:Setting a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "Setting"; + dcterms:valid "start=2026-10-10;"; dcterms:description "Per-tenant key/value configuration row. Stores arbitrary string-typed application settings (e.g. company address fields, default VAT rate, PDF footer text) outside of code. The label provides a human-readable caption used in admin UIs; the value is free-form text."; dcterms:source "AdaWorldAPI/WoA/models.py:Setting"; dcterms:creator "bus-compiler"; @@ -28,26 +29,3 @@ ogit.WorkOrder:Setting [ ogit:belongs ogit.WorkOrder:Tenant ] ); . - -# ── attributes ─────────────────────────────────────────────────────────── - -ogit.WorkOrder:settingKey - a rdfs:Property; - rdfs:label "settingKey"; - dcterms:description "Setting identifier (max 100 chars), unique per tenant. Conventionally dot-namespaced (e.g. 'company.address', 'pdf.footer')."; - dcterms:source "AdaWorldAPI/WoA/models.py:Setting.key"; -. - -ogit.WorkOrder:settingValue - a rdfs:Property; - rdfs:label "settingValue"; - dcterms:description "Free-form text value associated with the key. Application-side code is responsible for any type coercion (int/bool/json)."; - dcterms:source "AdaWorldAPI/WoA/models.py:Setting.value"; -. - -ogit.WorkOrder:label - a rdfs:Property; - rdfs:label "label"; - dcterms:description "Human-readable caption (max 200 chars) shown next to the key in admin UIs."; - dcterms:source "AdaWorldAPI/WoA/models.py:Setting.label"; -. diff --git a/NTO/WorkOrder/entities/Tenant.ttl b/NTO/WorkOrder/entities/Tenant.ttl index cc20f07ba5..6b5e332413 100644 --- a/NTO/WorkOrder/entities/Tenant.ttl +++ b/NTO/WorkOrder/entities/Tenant.ttl @@ -7,6 +7,8 @@ ogit.WorkOrder:Tenant a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "Tenant"; + dcterms:valid "start=2026-10-10;"; + dcterms:creator "claude-ogit-bootstrap"; dcterms:description "Multi-tenancy root for the WoA application. Every tenant-scoped business entity (Customer, Order, Article, etc.) carries a tenant_id foreign key referring to this class. Backed by SQLAlchemy table 'tenants'."; dcterms:source "AdaWorldAPI/WoA/models.py:Tenant"; ogit:scope "NTO"; @@ -25,34 +27,6 @@ ogit.WorkOrder:Tenant ogit:id ogit.WorkOrder:slug ); -. - -# ── attributes ─────────────────────────────────────────────────────────── - -ogit.WorkOrder:slug - a rdfs:Property; - rdfs:label "slug"; - dcterms:description "Unique URL-safe short identifier for the tenant (max 50 chars). Used in routing and as a stable handle independent of the numeric id."; - dcterms:source "AdaWorldAPI/WoA/models.py:Tenant.slug"; -. - -ogit.WorkOrder:aktiv - a rdfs:Property; - rdfs:label "aktiv"; - dcterms:description "Boolean active-flag. Inactive tenants are soft-disabled rather than deleted."; - dcterms:source "AdaWorldAPI/WoA/models.py:Tenant.aktiv"; -. - -ogit.WorkOrder:logoPath - a rdfs:Property; - rdfs:label "logoPath"; - dcterms:description "Filesystem or URL path to the tenant's logo image used in PDF/HTML rendering of work orders."; - dcterms:source "AdaWorldAPI/WoA/models.py:Tenant.logo_path"; -. - -ogit.WorkOrder:createdAt - a rdfs:Property; - rdfs:label "createdAt"; - dcterms:description "ISO-8601 UTC timestamp recording when the entity was first persisted."; - dcterms:source "AdaWorldAPI/WoA/models.py"; + ogit:allowed ( + ); . diff --git a/NTO/WorkOrder/entities/TimeSheet.ttl b/NTO/WorkOrder/entities/TimeSheet.ttl index d51ac6ef85..26261b4ce6 100644 --- a/NTO/WorkOrder/entities/TimeSheet.ttl +++ b/NTO/WorkOrder/entities/TimeSheet.ttl @@ -8,6 +8,7 @@ ogit.WorkOrder:TimeSheet a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "TimeSheet"; + dcterms:valid "start=2026-10-10;"; dcterms:description "Stundenzettel — a time-tracking record booked against a Customer (mandatory) and authored by a User (optional). Stores duration in minutes, a free-text description, and an 'abgerechnet' flag indicating whether the entry has been billed onto a downstream invoice. Provides 15-minute-rounded display values and decimal-hour conversion via instance methods."; dcterms:source "AdaWorldAPI/WoA/models.py:TimeSheet"; dcterms:creator "bus-compiler"; @@ -35,40 +36,3 @@ ogit.WorkOrder:TimeSheet [ ogit:relates ogit.WorkOrder:User ] ); . - -# ── attributes ─────────────────────────────────────────────────────────── - -ogit.WorkOrder:minuten - a rdfs:Property; - rdfs:label "minuten"; - dcterms:description "Duration of the recorded work in minutes (integer). Display helpers round up to the nearest 15-minute increment for billing."; - dcterms:source "AdaWorldAPI/WoA/models.py:TimeSheet.minuten"; -. - -ogit.WorkOrder:timerStart - a rdfs:Property; - rdfs:label "timerStart"; - dcterms:description "ISO-8601 UTC timestamp marking when a live timer was started for this entry. Null when not currently running."; - dcterms:source "AdaWorldAPI/WoA/models.py:TimeSheet.timer_start"; -. - -ogit.WorkOrder:abgerechnet - a rdfs:Property; - rdfs:label "abgerechnet"; - dcterms:description "Boolean billed-flag. True once the time entry has been transferred onto an invoice document, preventing double-billing."; - dcterms:source "AdaWorldAPI/WoA/models.py:TimeSheet.abgerechnet"; -. - -ogit.WorkOrder:beschreibung - a rdfs:Property; - rdfs:label "beschreibung"; - dcterms:description "Free-text description of the work performed during this time entry."; - dcterms:source "AdaWorldAPI/WoA/models.py:TimeSheet.beschreibung"; -. - -ogit.WorkOrder:updatedAt - a rdfs:Property; - rdfs:label "updatedAt"; - dcterms:description "ISO-8601 UTC timestamp of the most recent persisted update to the row."; - dcterms:source "AdaWorldAPI/WoA/models.py"; -. diff --git a/NTO/WorkOrder/entities/User.ttl b/NTO/WorkOrder/entities/User.ttl index aed69a1908..a5d8738378 100644 --- a/NTO/WorkOrder/entities/User.ttl +++ b/NTO/WorkOrder/entities/User.ttl @@ -8,6 +8,7 @@ ogit.WorkOrder:User a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "User"; + dcterms:valid "start=2026-10-10;"; dcterms:description "Internal WoA user / operator. Authenticates against pbkdf2:sha256 password hashes (werkzeug, 600k iterations, salted) with transparent migration from a legacy SHA256+salt format. Carries optional contact metadata (firstname, lastname, email, phone), the admin/superadmin flags that gate Flask routes, and a forced-password-change marker. Each User belongs to exactly one Tenant via tenant_id."; dcterms:source "AdaWorldAPI/WoA/models.py:User"; dcterms:creator "bus-compiler"; @@ -35,68 +36,3 @@ ogit.WorkOrder:User [ ogit:belongs ogit.WorkOrder:Tenant ] ); . - -# ── attributes ─────────────────────────────────────────────────────────── - -ogit.WorkOrder:username - a rdfs:Property; - rdfs:label "username"; - dcterms:description "Globally unique login handle (max 120 chars). Primary credential identifier used for password authentication."; - dcterms:source "AdaWorldAPI/WoA/models.py:User.username"; -. - -ogit.WorkOrder:passwordHash - a rdfs:Property; - rdfs:label "passwordHash"; - dcterms:description "Werkzeug-formatted password hash (pbkdf2:sha256:$$, max 256 chars). Legacy two-part SHA256+salt hashes are accepted on first login and transparently upgraded to pbkdf2."; - dcterms:source "AdaWorldAPI/WoA/models.py:User.password_hash"; -. - -ogit.WorkOrder:firstname - a rdfs:Property; - rdfs:label "firstname"; - dcterms:description "User's given name (max 120 chars)."; - dcterms:source "AdaWorldAPI/WoA/models.py:User.firstname"; -. - -ogit.WorkOrder:lastname - a rdfs:Property; - rdfs:label "lastname"; - dcterms:description "User's family name (max 120 chars)."; - dcterms:source "AdaWorldAPI/WoA/models.py:User.lastname"; -. - -ogit.WorkOrder:email - a rdfs:Property; - rdfs:label "email"; - dcterms:description "User's primary email address (max 200 chars). Used for notifications and password resets."; - dcterms:source "AdaWorldAPI/WoA/models.py:User.email"; -. - -ogit.WorkOrder:phone - a rdfs:Property; - rdfs:label "phone"; - dcterms:description "User's contact telephone number (max 100 chars)."; - dcterms:source "AdaWorldAPI/WoA/models.py:User.phone"; -. - -ogit.WorkOrder:isAdmin - a rdfs:Property; - rdfs:label "isAdmin"; - dcterms:description "Boolean flag granting admin-level access within the User's tenant scope (manage customers, articles, settings)."; - dcterms:source "AdaWorldAPI/WoA/models.py:User.is_admin"; -. - -ogit.WorkOrder:isSuperadmin - a rdfs:Property; - rdfs:label "isSuperadmin"; - dcterms:description "Boolean flag granting cross-tenant superadmin access (manage tenants, system-wide configuration)."; - dcterms:source "AdaWorldAPI/WoA/models.py:User.is_superadmin"; -. - -ogit.WorkOrder:mustChangePw - a rdfs:Property; - rdfs:label "mustChangePw"; - dcterms:description "Boolean forced-password-change marker. When true, the next successful login redirects the user to the password-reset flow."; - dcterms:source "AdaWorldAPI/WoA/models.py:User.must_change_pw"; -. From a5e94b43f0e5e6dc1fa6514eb1132af71b74c39d Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 28 Oct 2026 02:22:35 +0000 Subject: [PATCH 08/16] import_check: accept the verb-as-class form WorkOrder's twelve verbs are rdfs:Class + rdfs:subClassOf ogit:Verb with an ogit:from-to list, the convention OGAR documents as verb-as-class. C02 now reports only a verb that has neither that shape nor owl:ObjectProperty + rdfs:subPropertyOf ogit:Verb. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMPWTwovjYJEUMuGPb4 --- tools/README.md | 2 +- tools/__pycache__/import_check.cpython-313.pyc | Bin 0 -> 31203 bytes tools/import_check.py | 8 +++++--- tools/test_import_check.py | 13 +++++++++++-- 4 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 tools/__pycache__/import_check.cpython-313.pyc diff --git a/tools/README.md b/tools/README.md index 2bd4d7b3b3..237e3f7417 100644 --- a/tools/README.md +++ b/tools/README.md @@ -20,7 +20,7 @@ python3 -I tools/test_import_check.py | code | finding | |---|---| | C01 | a prefixed name uses a prefix the file does not declare | -| C02 | a verb is not `owl:ObjectProperty` + `rdfs:subPropertyOf ogit:Verb` | +| C02 | a verb has neither supported shape: `owl:ObjectProperty` + `rdfs:subPropertyOf ogit:Verb`, or `rdfs:Class` + `rdfs:subClassOf ogit:Verb` with `ogit:from-to` | | C03 | the file name differs from the local name of the term it declares | | C04 | an `ogit:allowed` or `ogit:from-to` verb is not declared | | C05 | an allowed or from-to source/target is not a declared entity | diff --git a/tools/__pycache__/import_check.cpython-313.pyc b/tools/__pycache__/import_check.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..623c4f71e3e7bdfe4e8f293cc82f3900b7fcf0a3 GIT binary patch literal 31203 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 V4}Ja6tn<>b_f$6Usn~%-{|kGn$JhV> literal 0 HcmV?d00001 diff --git a/tools/import_check.py b/tools/import_check.py index 47244bfe36..0fc46bc90f 100644 --- a/tools/import_check.py +++ b/tools/import_check.py @@ -19,7 +19,9 @@ Checks: C01 a prefixed name uses a prefix the file does not declare - C02 a verb is not `owl:ObjectProperty` + `rdfs:subPropertyOf ogit:Verb` + C02 a verb has neither supported shape: `owl:ObjectProperty` + + `rdfs:subPropertyOf ogit:Verb`, or `rdfs:Class` + `rdfs:subClassOf + ogit:Verb` with an `ogit:from-to` list (the verb-as-class form) C03 the file name differs from the local name of the term it declares C04 an `ogit:allowed` or `ogit:from-to` verb is not declared anywhere C05 an `ogit:allowed` or `ogit:from-to` target is not a declared entity @@ -363,9 +365,9 @@ def c(iri): stem = os.path.splitext(os.path.basename(path))[0] if os.path.basename(path) != "ogit.ttl" and local_name(iri) != stem: findings.append(("C03", path, line, f"{c(iri)} is declared in {os.path.basename(path)}")) - if iri in cverbs: + if iri in cverbs and not any(p.get(FROM_TO) for _, p, _ in ds): findings.append(("C02", ds[0][0], ds[0][2], - f"{c(iri)} is an rdfs:Class under ogit:Verb, not an owl:ObjectProperty")) + f"{c(iri)} is an rdfs:Class under ogit:Verb without an ogit:from-to list")) elif iri in pverbs and OBJECT_PROPERTY not in types.get(iri, ()): findings.append(("C02", ds[0][0], ds[0][2], f"{c(iri)} is a sub-property of ogit:Verb but not an owl:ObjectProperty")) diff --git a/tools/test_import_check.py b/tools/test_import_check.py index a006922db4..4e8f89ebeb 100644 --- a/tools/test_import_check.py +++ b/tools/test_import_check.py @@ -62,10 +62,19 @@ def test_c01_undeclared_prefix(self): _, codes = run({"T/entities/C.ttl": HEAD + "ogit.T:C a rdfs:Class ; rdfs:subClassOf ogit:Entity ; ogit:allowed ( [ ogit.T:links ogit.X:Y ] ) .\n"}) self.assertIn("C01", codes) - def test_c02_class_shaped_verb(self): + def test_c02_class_shaped_verb_without_from_to(self): _, codes = run({"T/verbs/links.ttl": HEAD + "ogit.T:links a rdfs:Class ; rdfs:subClassOf ogit:Verb .\n"}) self.assertEqual(codes, ["C02"]) + def test_c02_property_verb_must_be_an_object_property(self): + _, codes = run({"T/verbs/links.ttl": HEAD + "ogit.T:links a rdfs:Property ; rdfs:subPropertyOf ogit:Verb .\n"}) + self.assertEqual(codes, ["C02"]) + + def test_class_verb_with_from_to_is_supported(self): + verb = HEAD + "ogit.T:links a rdfs:Class ; rdfs:subClassOf ogit:Verb ; ogit:from-to ( [ ogit:from ogit.T:A ; ogit:to ogit.T:B ] ) .\n" + _, codes = run({"T/verbs/links.ttl": verb}) + self.assertEqual(codes, []) + def test_c03_file_name_case(self): _, codes = run({"T/verbs/links.ttl": None, "T/verbs/Links.ttl": BASE["T/verbs/links.ttl"]}) @@ -94,7 +103,7 @@ def test_c08_class_off_the_tree(self): def test_from_to_edges_are_collected_and_checked(self): verb = HEAD + "ogit.T:has a rdfs:Class ; rdfs:subClassOf ogit:Verb ; ogit:from-to ( [ ogit:from ogit.T:A ; ogit:to ogit.T:Z ] ) .\n" model, codes = run({"T/verbs/has.ttl": verb}) - self.assertEqual(codes, ["C02", "C05"]) + self.assertEqual(codes, ["C05"]) self.assertEqual(sum(1 for e in model["edges"] if e[5] == "from-to"), 1) def test_parse_error_is_reported_not_raised(self): From 3e865a298b10cc6c93436e89544e1da6bb294189 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 28 Oct 2026 02:24:55 +0000 Subject: [PATCH 09/16] Ground the thirteen new WorkOrder attributes in WoA models.py Descriptions now state each column's type, default and the behaviour WoA's code gives it (portal and DATEV filters, picture collection), and each dcterms:source names the exact model column. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMPWTwovjYJEUMuGPb4 --- NTO/WorkOrder/attributes/aktion.ttl | 4 ++-- NTO/WorkOrder/attributes/anKunde.ttl | 4 ++-- NTO/WorkOrder/attributes/dateiname.ttl | 4 ++-- NTO/WorkOrder/attributes/details.ttl | 4 ++-- NTO/WorkOrder/attributes/einheit.ttl | 4 ++-- NTO/WorkOrder/attributes/einzelpreis.ttl | 4 ++-- NTO/WorkOrder/attributes/geraet.ttl | 4 ++-- NTO/WorkOrder/attributes/intern.ttl | 4 ++-- NTO/WorkOrder/attributes/logbuch.ttl | 4 ++-- NTO/WorkOrder/attributes/menge.ttl | 4 ++-- NTO/WorkOrder/attributes/posTyp.ttl | 4 ++-- NTO/WorkOrder/attributes/sortOrder.ttl | 4 ++-- NTO/WorkOrder/attributes/versteckt.ttl | 4 ++-- 13 files changed, 26 insertions(+), 26 deletions(-) diff --git a/NTO/WorkOrder/attributes/aktion.ttl b/NTO/WorkOrder/attributes/aktion.ttl index 40de2fa01b..946d071338 100644 --- a/NTO/WorkOrder/attributes/aktion.ttl +++ b/NTO/WorkOrder/attributes/aktion.ttl @@ -8,8 +8,8 @@ ogit.WorkOrder:aktion a owl:DatatypeProperty; rdfs:subPropertyOf ogit:Attribute; rdfs:label "aktion"; - dcterms:description "Action label (Aktion) of an audit entry, naming the state change that was recorded."; - dcterms:source "AdaWorldAPI/WoA/models.py:HistoryEntry"; + dcterms:description "Action label (Aktion) of a history entry, naming what happened to the work order. Up to 255 characters."; + dcterms:source "AdaWorldAPI/WoA/models.py:HistoryEntry.aktion"; dcterms:valid "start=2026-10-10;"; dcterms:creator "claude-ogit-bootstrap"; . diff --git a/NTO/WorkOrder/attributes/anKunde.ttl b/NTO/WorkOrder/attributes/anKunde.ttl index b55c1fe842..cf27382d44 100644 --- a/NTO/WorkOrder/attributes/anKunde.ttl +++ b/NTO/WorkOrder/attributes/anKunde.ttl @@ -8,8 +8,8 @@ ogit.WorkOrder:anKunde a owl:DatatypeProperty; rdfs:subPropertyOf ogit:Attribute; rdfs:label "anKunde"; - dcterms:description "Customer flag (an_kunde). Boolean; true makes the attachment visible to, or sends it to, the customer."; - dcterms:source "AdaWorldAPI/WoA/models.py:Picture"; + dcterms:description "Customer flag (an_kunde). Boolean, default false; true includes the picture when pictures are collected for the customer."; + dcterms:source "AdaWorldAPI/WoA/models.py:Picture.an_kunde"; dcterms:valid "start=2026-10-10;"; dcterms:creator "claude-ogit-bootstrap"; . diff --git a/NTO/WorkOrder/attributes/dateiname.ttl b/NTO/WorkOrder/attributes/dateiname.ttl index 70d3eb4a88..28cc1d6c71 100644 --- a/NTO/WorkOrder/attributes/dateiname.ttl +++ b/NTO/WorkOrder/attributes/dateiname.ttl @@ -8,8 +8,8 @@ ogit.WorkOrder:dateiname a owl:DatatypeProperty; rdfs:subPropertyOf ogit:Attribute; rdfs:label "dateiname"; - dcterms:description "Stored file name (Dateiname) of an image or document attachment."; - dcterms:source "AdaWorldAPI/WoA/models.py:Picture"; + dcterms:description "Stored file name (Dateiname) of a picture on disk."; + dcterms:source "AdaWorldAPI/WoA/models.py:Picture.dateiname"; dcterms:valid "start=2026-10-10;"; dcterms:creator "claude-ogit-bootstrap"; . diff --git a/NTO/WorkOrder/attributes/details.ttl b/NTO/WorkOrder/attributes/details.ttl index c375cd99d7..e1a55cb475 100644 --- a/NTO/WorkOrder/attributes/details.ttl +++ b/NTO/WorkOrder/attributes/details.ttl @@ -8,8 +8,8 @@ ogit.WorkOrder:details a owl:DatatypeProperty; rdfs:subPropertyOf ogit:Attribute; rdfs:label "details"; - dcterms:description "Free-text details of an audit entry."; - dcterms:source "AdaWorldAPI/WoA/models.py:HistoryEntry"; + dcterms:description "Free-text details of a history entry."; + dcterms:source "AdaWorldAPI/WoA/models.py:HistoryEntry.details"; dcterms:valid "start=2026-10-10;"; dcterms:creator "claude-ogit-bootstrap"; . diff --git a/NTO/WorkOrder/attributes/einheit.ttl b/NTO/WorkOrder/attributes/einheit.ttl index 70a1a37eb0..4681435527 100644 --- a/NTO/WorkOrder/attributes/einheit.ttl +++ b/NTO/WorkOrder/attributes/einheit.ttl @@ -8,8 +8,8 @@ ogit.WorkOrder:einheit a owl:DatatypeProperty; rdfs:subPropertyOf ogit:Attribute; rdfs:label "einheit"; - dcterms:description "Unit (Einheit) in which the quantity of a line item is measured."; - dcterms:source "AdaWorldAPI/WoA/models.py:Position"; + dcterms:description "Unit (Einheit) of a line item's quantity, such as Stk. Default Stk."; + dcterms:source "AdaWorldAPI/WoA/models.py:Position.einheit"; dcterms:valid "start=2026-10-10;"; dcterms:creator "claude-ogit-bootstrap"; . diff --git a/NTO/WorkOrder/attributes/einzelpreis.ttl b/NTO/WorkOrder/attributes/einzelpreis.ttl index 0a40f874a3..74bfaa127e 100644 --- a/NTO/WorkOrder/attributes/einzelpreis.ttl +++ b/NTO/WorkOrder/attributes/einzelpreis.ttl @@ -8,8 +8,8 @@ ogit.WorkOrder:einzelpreis a owl:DatatypeProperty; rdfs:subPropertyOf ogit:Attribute; rdfs:label "einzelpreis"; - dcterms:description "Unit price (Einzelpreis) of a line item."; - dcterms:source "AdaWorldAPI/WoA/models.py:Position"; + dcterms:description "Net unit price (Einzelpreis) of a line item, a decimal with two places. Default 0."; + dcterms:source "AdaWorldAPI/WoA/models.py:Position.einzelpreis"; dcterms:valid "start=2026-10-10;"; dcterms:creator "claude-ogit-bootstrap"; . diff --git a/NTO/WorkOrder/attributes/geraet.ttl b/NTO/WorkOrder/attributes/geraet.ttl index bef0778213..42e15f6da1 100644 --- a/NTO/WorkOrder/attributes/geraet.ttl +++ b/NTO/WorkOrder/attributes/geraet.ttl @@ -8,8 +8,8 @@ ogit.WorkOrder:geraet a owl:DatatypeProperty; rdfs:subPropertyOf ogit:Attribute; rdfs:label "geraet"; - dcterms:description "Optional reference to the device or asset (Geraet) the activity was performed on."; - dcterms:source "AdaWorldAPI/WoA/models.py:Activity"; + dcterms:description "Device or asset (Geraet) the activity was performed on. Free text, up to 150 characters."; + dcterms:source "AdaWorldAPI/WoA/models.py:Activity.geraet"; dcterms:valid "start=2026-10-10;"; dcterms:creator "claude-ogit-bootstrap"; . diff --git a/NTO/WorkOrder/attributes/intern.ttl b/NTO/WorkOrder/attributes/intern.ttl index 469a312da2..6d680bec30 100644 --- a/NTO/WorkOrder/attributes/intern.ttl +++ b/NTO/WorkOrder/attributes/intern.ttl @@ -8,8 +8,8 @@ ogit.WorkOrder:intern a owl:DatatypeProperty; rdfs:subPropertyOf ogit:Attribute; rdfs:label "intern"; - dcterms:description "Internal-only flag (intern). Boolean; true keeps the activity off customer-facing documents."; - dcterms:source "AdaWorldAPI/WoA/models.py:Activity"; + dcterms:description "Internal flag (intern). Boolean, default false; true hides the activity from the customer portal's logbook."; + dcterms:source "AdaWorldAPI/WoA/models.py:Activity.intern"; dcterms:valid "start=2026-10-10;"; dcterms:creator "claude-ogit-bootstrap"; . diff --git a/NTO/WorkOrder/attributes/logbuch.ttl b/NTO/WorkOrder/attributes/logbuch.ttl index 79a863117c..2b7c77339c 100644 --- a/NTO/WorkOrder/attributes/logbuch.ttl +++ b/NTO/WorkOrder/attributes/logbuch.ttl @@ -8,8 +8,8 @@ ogit.WorkOrder:logbuch a owl:DatatypeProperty; rdfs:subPropertyOf ogit:Attribute; rdfs:label "logbuch"; - dcterms:description "Logbook flag (Logbuch). Boolean; true includes the record in the driver/work logbook export."; - dcterms:source "AdaWorldAPI/WoA/models.py:Activity", "AdaWorldAPI/WoA/models.py:Picture"; + dcterms:description "Logbook flag (Logbuch). Boolean, default false; true lists the activity or picture in the customer's logbook, both on the customer page and in the customer portal."; + dcterms:source "AdaWorldAPI/WoA/models.py:Activity.logbuch", "AdaWorldAPI/WoA/models.py:Picture.logbuch"; dcterms:valid "start=2026-10-10;"; dcterms:creator "claude-ogit-bootstrap"; . diff --git a/NTO/WorkOrder/attributes/menge.ttl b/NTO/WorkOrder/attributes/menge.ttl index 81ec9a6643..e99a9fd794 100644 --- a/NTO/WorkOrder/attributes/menge.ttl +++ b/NTO/WorkOrder/attributes/menge.ttl @@ -8,8 +8,8 @@ ogit.WorkOrder:menge a owl:DatatypeProperty; rdfs:subPropertyOf ogit:Attribute; rdfs:label "menge"; - dcterms:description "Quantity (Menge) of a line item."; - dcterms:source "AdaWorldAPI/WoA/models.py:Position"; + dcterms:description "Quantity (Menge) of a line item. Default 1."; + dcterms:source "AdaWorldAPI/WoA/models.py:Position.menge"; dcterms:valid "start=2026-10-10;"; dcterms:creator "claude-ogit-bootstrap"; . diff --git a/NTO/WorkOrder/attributes/posTyp.ttl b/NTO/WorkOrder/attributes/posTyp.ttl index 2ff12e057b..976d40e207 100644 --- a/NTO/WorkOrder/attributes/posTyp.ttl +++ b/NTO/WorkOrder/attributes/posTyp.ttl @@ -8,8 +8,8 @@ ogit.WorkOrder:posTyp a owl:DatatypeProperty; rdfs:subPropertyOf ogit:Attribute; rdfs:label "posTyp"; - dcterms:description "Line-item type (Positionstyp): a billable row or a descriptive row."; - dcterms:source "AdaWorldAPI/WoA/models.py:Position"; + dcterms:description "Line-item type (pos_typ), such as material, dienstleistung, fahrt or oneshot. Default material."; + dcterms:source "AdaWorldAPI/WoA/models.py:Position.pos_typ"; dcterms:valid "start=2026-10-10;"; dcterms:creator "claude-ogit-bootstrap"; . diff --git a/NTO/WorkOrder/attributes/sortOrder.ttl b/NTO/WorkOrder/attributes/sortOrder.ttl index 505ee1ff6d..5dfc3e2f2a 100644 --- a/NTO/WorkOrder/attributes/sortOrder.ttl +++ b/NTO/WorkOrder/attributes/sortOrder.ttl @@ -8,8 +8,8 @@ ogit.WorkOrder:sortOrder a owl:DatatypeProperty; rdfs:subPropertyOf ogit:Attribute; rdfs:label "sortOrder"; - dcterms:description "Ordering index of a line item within its document."; - dcterms:source "AdaWorldAPI/WoA/models.py:Position"; + dcterms:description "Ordering index of a line item within its document. Integer, default 0."; + dcterms:source "AdaWorldAPI/WoA/models.py:Position.sort_order"; dcterms:valid "start=2026-10-10;"; dcterms:creator "claude-ogit-bootstrap"; . diff --git a/NTO/WorkOrder/attributes/versteckt.ttl b/NTO/WorkOrder/attributes/versteckt.ttl index 959291c32a..9dc6dd1d76 100644 --- a/NTO/WorkOrder/attributes/versteckt.ttl +++ b/NTO/WorkOrder/attributes/versteckt.ttl @@ -8,8 +8,8 @@ ogit.WorkOrder:versteckt a owl:DatatypeProperty; rdfs:subPropertyOf ogit:Attribute; rdfs:label "versteckt"; - dcterms:description "Hidden flag (versteckt). Boolean; true omits the line item from the printed document."; - dcterms:source "AdaWorldAPI/WoA/models.py:Position"; + dcterms:description "Hidden flag (versteckt). Boolean, default false; a hidden line item is left out of the DATEV export and of the customer portal's acceptance page."; + dcterms:source "AdaWorldAPI/WoA/models.py:Position.versteckt"; dcterms:valid "start=2026-10-10;"; dcterms:creator "claude-ogit-bootstrap"; . From 7725f7315cd8f5240ce771e0f8d5897c38ffb4de Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 28 Oct 2026 02:26:35 +0000 Subject: [PATCH 10/16] Move the root-namespace SGO files under SGO/ogit The validator requires every file to sit below a directory named after its namespace: for ogit:creates the path must match /ogit/(.*)/creates.ttl. The 470 files in SGO/sgo and the 27 in SGO/core are all in the root ogit: namespace, so with more than one input file the validator stopped at the first of them ("creates.ttl should be under directory ogit"). That layout has been rejected since the 2019 validator jar. They move to SGO/ogit/{attributes,entities,verbs} and SGO/ogit/core. No file content changes, and no file name collides. The READMEs, two NTO READMEs and the comment in validate.sh follow the new paths. ./validate.sh now reports "Validation successful." over all 3675 files. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMPWTwovjYJEUMuGPb4 --- NTO/GFS/README.md | 2 +- NTO/HR/README.md | 2 +- SGO/README.md | 4 +--- SGO/ogit/README.md | 15 ++++++++++++++- SGO/{sgo => ogit}/attributes/BatteryState.ttl | 0 SGO/{sgo => ogit}/attributes/accessControl.ttl | 0 SGO/{sgo => ogit}/attributes/acknowledgeState.ttl | 0 SGO/{sgo => ogit}/attributes/addressLocality.ttl | 0 SGO/{sgo => ogit}/attributes/alias.ttl | 0 SGO/{sgo => ogit}/attributes/alternativeName.ttl | 0 SGO/{sgo => ogit}/attributes/altitude.ttl | 0 SGO/{sgo => ogit}/attributes/amount.ttl | 0 SGO/{sgo => ogit}/attributes/area.ttl | 0 SGO/{sgo => ogit}/attributes/asset.ttl | 0 SGO/{sgo => ogit}/attributes/assetTag.ttl | 0 SGO/{sgo => ogit}/attributes/assignedAt.ttl | 0 SGO/{sgo => ogit}/attributes/assignedGroup.ttl | 0 SGO/{sgo => ogit}/attributes/attachmentID.ttl | 0 SGO/{sgo => ogit}/attributes/author.ttl | 0 SGO/{sgo => ogit}/attributes/availability.ttl | 0 SGO/{sgo => ogit}/attributes/birthplace.ttl | 0 SGO/{sgo => ogit}/attributes/brand.ttl | 0 SGO/{sgo => ogit}/attributes/buildingId.ttl | 0 SGO/{sgo => ogit}/attributes/businessCategory.ttl | 0 .../attributes/businessCriticality.ttl | 0 SGO/{sgo => ogit}/attributes/capacity.ttl | 0 .../attributes/capacityAvailable.ttl | 0 SGO/{sgo => ogit}/attributes/category.ttl | 0 SGO/{sgo => ogit}/attributes/certainty.ttl | 0 SGO/{sgo => ogit}/attributes/changeLog.ttl | 0 SGO/{sgo => ogit}/attributes/checkedInAt.ttl | 0 SGO/{sgo => ogit}/attributes/checkedOutAt.ttl | 0 SGO/{sgo => ogit}/attributes/ciType.ttl | 0 SGO/{sgo => ogit}/attributes/city.ttl | 0 SGO/{sgo => ogit}/attributes/class.ttl | 0 SGO/{sgo => ogit}/attributes/classification.ttl | 0 SGO/{sgo => ogit}/attributes/cleanContent.ttl | 0 SGO/{sgo => ogit}/attributes/closedAt.ttl | 0 SGO/{sgo => ogit}/attributes/codeType.ttl | 0 SGO/{sgo => ogit}/attributes/color.ttl | 0 SGO/{sgo => ogit}/attributes/comment.ttl | 0 SGO/{sgo => ogit}/attributes/condition.ttl | 0 SGO/{sgo => ogit}/attributes/confidence.ttl | 0 SGO/{sgo => ogit}/attributes/confidentiality.ttl | 0 SGO/{sgo => ogit}/attributes/connectorId.ttl | 0 SGO/{sgo => ogit}/attributes/consentLevel.ttl | 0 SGO/{sgo => ogit}/attributes/contact.ttl | 0 SGO/{sgo => ogit}/attributes/content.ttl | 0 SGO/{sgo => ogit}/attributes/coordinate.ttl | 0 SGO/{sgo => ogit}/attributes/country.ttl | 0 SGO/{sgo => ogit}/attributes/createdAt.ttl | 0 SGO/{sgo => ogit}/attributes/createdBy.ttl | 0 SGO/{sgo => ogit}/attributes/creationTime.ttl | 0 SGO/{sgo => ogit}/attributes/creator.ttl | 0 SGO/{sgo => ogit}/attributes/currency.ttl | 0 SGO/{sgo => ogit}/attributes/dateOfBirth.ttl | 0 SGO/{sgo => ogit}/attributes/dateOfDeath.ttl | 0 SGO/{sgo => ogit}/attributes/dayOfWeek.ttl | 0 SGO/{sgo => ogit}/attributes/deadline.ttl | 0 SGO/{sgo => ogit}/attributes/deliveredAt.ttl | 0 SGO/{sgo => ogit}/attributes/description.ttl | 0 SGO/{sgo => ogit}/attributes/duration.ttl | 0 SGO/{sgo => ogit}/attributes/durationUnit.ttl | 0 SGO/{sgo => ogit}/attributes/effort.ttl | 0 SGO/{sgo => ogit}/attributes/email.ttl | 0 SGO/{sgo => ogit}/attributes/endOfWarranty.ttl | 0 SGO/{sgo => ogit}/attributes/endedAt.ttl | 0 SGO/{sgo => ogit}/attributes/enumValues.ttl | 0 SGO/{sgo => ogit}/attributes/expirationDate.ttl | 0 SGO/{sgo => ogit}/attributes/expiresAt.ttl | 0 SGO/{sgo => ogit}/attributes/externalId.ttl | 0 SGO/{sgo => ogit}/attributes/faultCount.ttl | 0 SGO/{sgo => ogit}/attributes/favorite.ttl | 0 SGO/{sgo => ogit}/attributes/fax.ttl | 0 SGO/{sgo => ogit}/attributes/finishedAt.ttl | 0 SGO/{sgo => ogit}/attributes/firstName.ttl | 0 SGO/{sgo => ogit}/attributes/firstOccurredAt.ttl | 0 SGO/{sgo => ogit}/attributes/followers.ttl | 0 SGO/{sgo => ogit}/attributes/foundingDate.ttl | 0 SGO/{sgo => ogit}/attributes/frequency.ttl | 0 SGO/{sgo => ogit}/attributes/function.ttl | 0 SGO/{sgo => ogit}/attributes/gender.ttl | 0 SGO/{sgo => ogit}/attributes/id.ttl | 0 SGO/{sgo => ogit}/attributes/identifierCode.ttl | 0 SGO/{sgo => ogit}/attributes/impact.ttl | 0 SGO/{sgo => ogit}/attributes/information.ttl | 0 SGO/{sgo => ogit}/attributes/installStatus.ttl | 0 SGO/{sgo => ogit}/attributes/installedAt.ttl | 0 SGO/{sgo => ogit}/attributes/instance.ttl | 0 SGO/{sgo => ogit}/attributes/integrity.ttl | 0 SGO/{sgo => ogit}/attributes/inventoryNumber.ttl | 0 SGO/{sgo => ogit}/attributes/invoiceNumber.ttl | 0 SGO/{sgo => ogit}/attributes/ipAddress.ttl | 0 SGO/{sgo => ogit}/attributes/isCritical.ttl | 0 SGO/{sgo => ogit}/attributes/isInternal.ttl | 0 SGO/{sgo => ogit}/attributes/isMutable.ttl | 0 SGO/{sgo => ogit}/attributes/isPermanent.ttl | 0 SGO/{sgo => ogit}/attributes/isRoot.ttl | 0 SGO/{sgo => ogit}/attributes/isSupported.ttl | 0 SGO/{sgo => ogit}/attributes/isValid.ttl | 0 SGO/{sgo => ogit}/attributes/justification.ttl | 0 SGO/{sgo => ogit}/attributes/language.ttl | 0 SGO/{sgo => ogit}/attributes/lastClearedAt.ttl | 0 SGO/{sgo => ogit}/attributes/lastName.ttl | 0 SGO/{sgo => ogit}/attributes/lastOccurredAt.ttl | 0 SGO/{sgo => ogit}/attributes/lastScannedAt.ttl | 0 SGO/{sgo => ogit}/attributes/lastUpdatedAt.ttl | 0 SGO/{sgo => ogit}/attributes/lastUpdatedBy.ttl | 0 SGO/{sgo => ogit}/attributes/latestVersion.ttl | 0 SGO/{sgo => ogit}/attributes/latitude.ttl | 0 SGO/{sgo => ogit}/attributes/leaseContract.ttl | 0 .../attributes/lengthOfReportingPeriod.ttl | 0 SGO/{sgo => ogit}/attributes/licenseId.ttl | 0 SGO/{sgo => ogit}/attributes/licenseKey.ttl | 0 .../attributes/licenseRequestStatus.ttl | 0 SGO/{sgo => ogit}/attributes/licenseSubject.ttl | 0 SGO/{sgo => ogit}/attributes/licenseType.ttl | 0 .../attributes/locationAcquisitionTime.ttl | 0 .../attributes/locationPrecision.ttl | 0 SGO/{sgo => ogit}/attributes/locked.ttl | 0 SGO/{sgo => ogit}/attributes/longitude.ttl | 0 SGO/{sgo => ogit}/attributes/lowerLimit.ttl | 0 SGO/{sgo => ogit}/attributes/macAddress.ttl | 0 SGO/{sgo => ogit}/attributes/maintenanceState.ttl | 0 SGO/{sgo => ogit}/attributes/manufacturer.ttl | 0 SGO/{sgo => ogit}/attributes/market.ttl | 0 SGO/{sgo => ogit}/attributes/message.ttl | 0 SGO/{sgo => ogit}/attributes/middleName.ttl | 0 SGO/{sgo => ogit}/attributes/mimeType.ttl | 0 SGO/{sgo => ogit}/attributes/mobilePhone.ttl | 0 SGO/{sgo => ogit}/attributes/mode.ttl | 0 SGO/{sgo => ogit}/attributes/model.ttl | 0 SGO/{sgo => ogit}/attributes/modelNumber.ttl | 0 SGO/{sgo => ogit}/attributes/modificationTime.ttl | 0 SGO/{sgo => ogit}/attributes/name.ttl | 0 SGO/{sgo => ogit}/attributes/negativeScore.ttl | 0 SGO/{sgo => ogit}/attributes/notification.ttl | 0 SGO/{sgo => ogit}/attributes/numberOfChildren.ttl | 0 SGO/{sgo => ogit}/attributes/occurenceCount.ttl | 0 SGO/{sgo => ogit}/attributes/officePhone.ttl | 0 SGO/{sgo => ogit}/attributes/onAttribute.ttl | 0 SGO/{sgo => ogit}/attributes/onVertex.ttl | 0 SGO/{sgo => ogit}/attributes/openedAt.ttl | 0 SGO/{sgo => ogit}/attributes/operation.ttl | 0 .../attributes/operationalStatus.ttl | 0 SGO/{sgo => ogit}/attributes/orderedAt.ttl | 0 SGO/{sgo => ogit}/attributes/otherPhone.ttl | 0 SGO/{sgo => ogit}/attributes/parentId.ttl | 0 SGO/{sgo => ogit}/attributes/passportNumber.ttl | 0 SGO/{sgo => ogit}/attributes/pendingChange.ttl | 0 SGO/{sgo => ogit}/attributes/phone.ttl | 0 SGO/{sgo => ogit}/attributes/placement.ttl | 0 .../attributes/plannedFinishDate.ttl | 0 SGO/{sgo => ogit}/attributes/plannedStartDate.ttl | 0 SGO/{sgo => ogit}/attributes/polarity.ttl | 0 SGO/{sgo => ogit}/attributes/position.ttl | 0 SGO/{sgo => ogit}/attributes/positionNumber.ttl | 0 SGO/{sgo => ogit}/attributes/positiveScore.ttl | 0 SGO/{sgo => ogit}/attributes/postalCode.ttl | 0 SGO/{sgo => ogit}/attributes/powerConsumption.ttl | 0 SGO/{sgo => ogit}/attributes/priority.ttl | 0 .../attributes/productOrderNumber.ttl | 0 SGO/{sgo => ogit}/attributes/profession.ttl | 0 SGO/{sgo => ogit}/attributes/project.ttl | 0 SGO/{sgo => ogit}/attributes/public.ttl | 0 SGO/{sgo => ogit}/attributes/publishedAt.ttl | 0 SGO/{sgo => ogit}/attributes/purchaseDate.ttl | 0 SGO/{sgo => ogit}/attributes/purchasedAt.ttl | 0 SGO/{sgo => ogit}/attributes/question.ttl | 0 SGO/{sgo => ogit}/attributes/range.ttl | 0 SGO/{sgo => ogit}/attributes/rank.ttl | 0 SGO/{sgo => ogit}/attributes/reason.ttl | 0 SGO/{sgo => ogit}/attributes/recipients.ttl | 0 SGO/{sgo => ogit}/attributes/religion.ttl | 0 SGO/{sgo => ogit}/attributes/reportedAt.ttl | 0 SGO/{sgo => ogit}/attributes/reportedBy.ttl | 0 SGO/{sgo => ogit}/attributes/resource.ttl | 0 SGO/{sgo => ogit}/attributes/response.ttl | 0 SGO/{sgo => ogit}/attributes/reviewedAt.ttl | 0 SGO/{sgo => ogit}/attributes/reviewedBy.ttl | 0 SGO/{sgo => ogit}/attributes/revision.ttl | 0 SGO/{sgo => ogit}/attributes/revokedAt.ttl | 0 SGO/{sgo => ogit}/attributes/risk.ttl | 0 SGO/{sgo => ogit}/attributes/schedule.ttl | 0 SGO/{sgo => ogit}/attributes/section.ttl | 0 SGO/{sgo => ogit}/attributes/securityClass.ttl | 0 SGO/{sgo => ogit}/attributes/serialNumber.ttl | 0 SGO/{sgo => ogit}/attributes/serviceContract.ttl | 0 SGO/{sgo => ogit}/attributes/severity.ttl | 0 SGO/{sgo => ogit}/attributes/sharedWith.ttl | 0 SGO/{sgo => ogit}/attributes/shortDescription.ttl | 0 SGO/{sgo => ogit}/attributes/size.ttl | 0 SGO/{sgo => ogit}/attributes/source.ttl | 0 SGO/{sgo => ogit}/attributes/sourceId.ttl | 0 SGO/{sgo => ogit}/attributes/sourceTable.ttl | 0 SGO/{sgo => ogit}/attributes/soxClass.ttl | 0 SGO/{sgo => ogit}/attributes/startOfWarranty.ttl | 0 SGO/{sgo => ogit}/attributes/startedAt.ttl | 0 SGO/{sgo => ogit}/attributes/status.ttl | 0 SGO/{sgo => ogit}/attributes/streetAddress.ttl | 0 SGO/{sgo => ogit}/attributes/subCategory.ttl | 0 SGO/{sgo => ogit}/attributes/subType.ttl | 0 SGO/{sgo => ogit}/attributes/subject.ttl | 0 SGO/{sgo => ogit}/attributes/summary.ttl | 0 SGO/{sgo => ogit}/attributes/synonyms.ttl | 0 SGO/{sgo => ogit}/attributes/tags.ttl | 0 SGO/{sgo => ogit}/attributes/taskLog.ttl | 0 SGO/{sgo => ogit}/attributes/tenantId.ttl | 0 SGO/{sgo => ogit}/attributes/timeZone.ttl | 0 SGO/{sgo => ogit}/attributes/timestamp.ttl | 0 SGO/{sgo => ogit}/attributes/title.ttl | 0 SGO/{sgo => ogit}/attributes/token.ttl | 0 SGO/{sgo => ogit}/attributes/tone.ttl | 0 SGO/{sgo => ogit}/attributes/type.ttl | 0 SGO/{sgo => ogit}/attributes/unit.ttl | 0 SGO/{sgo => ogit}/attributes/unitDescription.ttl | 0 SGO/{sgo => ogit}/attributes/updateCount.ttl | 0 SGO/{sgo => ogit}/attributes/upperLimit.ttl | 0 SGO/{sgo => ogit}/attributes/urgency.ttl | 0 SGO/{sgo => ogit}/attributes/uri.ttl | 0 SGO/{sgo => ogit}/attributes/url.ttl | 0 SGO/{sgo => ogit}/attributes/validFrom.ttl | 0 SGO/{sgo => ogit}/attributes/validTo.ttl | 0 SGO/{sgo => ogit}/attributes/value.ttl | 0 SGO/{sgo => ogit}/attributes/valueDate.ttl | 0 SGO/{sgo => ogit}/attributes/values.ttl | 0 SGO/{sgo => ogit}/attributes/vendor.ttl | 0 SGO/{sgo => ogit}/attributes/version.ttl | 0 SGO/{sgo => ogit}/attributes/webPage.ttl | 0 SGO/{sgo => ogit}/attributes/weight.ttl | 0 SGO/{sgo => ogit}/attributes/yearOfBirth.ttl | 0 SGO/{sgo => ogit}/attributes/zipCode.ttl | 0 SGO/{ => ogit}/core/attributes/_c-id.ttl | 0 SGO/{ => ogit}/core/attributes/_content.ttl | 0 SGO/{ => ogit}/core/attributes/_created-on.ttl | 0 SGO/{ => ogit}/core/attributes/_creator-app.ttl | 0 SGO/{ => ogit}/core/attributes/_creator.ttl | 0 .../core/attributes/_deleted-by-app.ttl | 0 SGO/{ => ogit}/core/attributes/_deleted-by.ttl | 0 SGO/{ => ogit}/core/attributes/_deleted-on.ttl | 0 SGO/{ => ogit}/core/attributes/_edge-id.ttl | 0 SGO/{ => ogit}/core/attributes/_graphtype.ttl | 0 SGO/{ => ogit}/core/attributes/_id.ttl | 0 SGO/{ => ogit}/core/attributes/_is-deleted.ttl | 0 .../core/attributes/_modified-by-app.ttl | 0 SGO/{ => ogit}/core/attributes/_modified-by.ttl | 0 SGO/{ => ogit}/core/attributes/_modified-on.ttl | 0 SGO/{ => ogit}/core/attributes/_organization.ttl | 0 SGO/{ => ogit}/core/attributes/_owner.ttl | 0 SGO/{ => ogit}/core/attributes/_reader.ttl | 0 SGO/{ => ogit}/core/attributes/_scope.ttl | 0 SGO/{ => ogit}/core/attributes/_source.ttl | 0 SGO/{ => ogit}/core/attributes/_tags.ttl | 0 SGO/{ => ogit}/core/attributes/_type.ttl | 0 SGO/{ => ogit}/core/attributes/_v-id.ttl | 0 SGO/{ => ogit}/core/attributes/_v.ttl | 0 SGO/{ => ogit}/core/attributes/_version.ttl | 0 SGO/{ => ogit}/core/attributes/_xid.ttl | 0 SGO/{ => ogit}/core/entities/Node.ttl | 0 SGO/{sgo => ogit}/entities/Account.ttl | 0 SGO/{sgo => ogit}/entities/Agent.ttl | 0 SGO/{sgo => ogit}/entities/Alert.ttl | 0 SGO/{sgo => ogit}/entities/Annotation.ttl | 0 SGO/{sgo => ogit}/entities/Asset.ttl | 0 SGO/{sgo => ogit}/entities/Attachment.ttl | 0 SGO/{sgo => ogit}/entities/Blob.ttl | 0 SGO/{sgo => ogit}/entities/Catalog.ttl | 0 SGO/{sgo => ogit}/entities/CatalogItem.ttl | 0 SGO/{sgo => ogit}/entities/Category.ttl | 0 SGO/{sgo => ogit}/entities/Certificate.ttl | 0 SGO/{sgo => ogit}/entities/Comment.ttl | 0 SGO/{sgo => ogit}/entities/Configuration.ttl | 0 SGO/{sgo => ogit}/entities/ConfigurationItem.ttl | 0 SGO/{sgo => ogit}/entities/Contract.ttl | 0 SGO/{sgo => ogit}/entities/Course.ttl | 0 .../entities/CustomApplicationData.ttl | 0 SGO/{sgo => ogit}/entities/Device.ttl | 0 SGO/{sgo => ogit}/entities/Email.ttl | 0 SGO/{sgo => ogit}/entities/Environment.ttl | 0 SGO/{sgo => ogit}/entities/Equivalence.ttl | 0 SGO/{sgo => ogit}/entities/Event.ttl | 0 SGO/{sgo => ogit}/entities/Feature.ttl | 0 SGO/{sgo => ogit}/entities/Hyperedge.ttl | 0 SGO/{sgo => ogit}/entities/Hyperlink.ttl | 0 SGO/{sgo => ogit}/entities/Installation.ttl | 0 SGO/{sgo => ogit}/entities/Intent.ttl | 0 SGO/{sgo => ogit}/entities/Keyword.ttl | 0 SGO/{sgo => ogit}/entities/License.ttl | 0 SGO/{sgo => ogit}/entities/LicenseRequest.ttl | 0 SGO/{sgo => ogit}/entities/LicenseToken.ttl | 0 SGO/{sgo => ogit}/entities/Location.ttl | 0 SGO/{sgo => ogit}/entities/Note.ttl | 0 SGO/{sgo => ogit}/entities/Notification.ttl | 0 SGO/{sgo => ogit}/entities/Offer.ttl | 0 SGO/{sgo => ogit}/entities/Organization.ttl | 0 SGO/{sgo => ogit}/entities/Parameter.ttl | 0 SGO/{sgo => ogit}/entities/ParameterType.ttl | 0 SGO/{sgo => ogit}/entities/Penalty.ttl | 0 SGO/{sgo => ogit}/entities/Person.ttl | 0 SGO/{sgo => ogit}/entities/Policy.ttl | 0 SGO/{sgo => ogit}/entities/Product.ttl | 0 SGO/{sgo => ogit}/entities/Question.ttl | 0 SGO/{sgo => ogit}/entities/Rating.ttl | 0 SGO/{sgo => ogit}/entities/Region.ttl | 0 SGO/{sgo => ogit}/entities/Relevance.ttl | 0 SGO/{sgo => ogit}/entities/ReportedStatistic.ttl | 0 SGO/{sgo => ogit}/entities/Requirements.ttl | 0 SGO/{sgo => ogit}/entities/Role.ttl | 0 SGO/{sgo => ogit}/entities/RoleAssignment.ttl | 0 SGO/{sgo => ogit}/entities/Schema.ttl | 0 SGO/{sgo => ogit}/entities/Series.ttl | 0 SGO/{sgo => ogit}/entities/Status.ttl | 0 SGO/{sgo => ogit}/entities/Subscription.ttl | 0 SGO/{sgo => ogit}/entities/Tag.ttl | 0 SGO/{sgo => ogit}/entities/Task.ttl | 0 SGO/{sgo => ogit}/entities/TaskList.ttl | 0 SGO/{sgo => ogit}/entities/TermsAndConditions.ttl | 0 SGO/{sgo => ogit}/entities/Timeseries.ttl | 0 SGO/{sgo => ogit}/entities/Tone.ttl | 0 SGO/{sgo => ogit}/entities/Vcard.ttl | 0 SGO/{sgo => ogit}/entities/VersioningData.ttl | 0 SGO/{sgo => ogit}/verbs/accepts.ttl | 0 SGO/{sgo => ogit}/verbs/activates.ttl | 0 SGO/{sgo => ogit}/verbs/actsOnBehalfOf.ttl | 0 .../verbs/administratorInInsolvencyOf.ttl | 0 SGO/{sgo => ogit}/verbs/administratorOf.ttl | 0 SGO/{sgo => ogit}/verbs/affects.ttl | 0 SGO/{sgo => ogit}/verbs/affiliateOf.ttl | 0 SGO/{sgo => ogit}/verbs/alerts.ttl | 0 SGO/{sgo => ogit}/verbs/approves.ttl | 0 SGO/{sgo => ogit}/verbs/assignedTo.ttl | 0 SGO/{sgo => ogit}/verbs/associates.ttl | 0 SGO/{sgo => ogit}/verbs/assumes.ttl | 0 .../verbs/auditCommitteeMemberOf.ttl | 0 SGO/{sgo => ogit}/verbs/auditorOf.ttl | 0 SGO/{sgo => ogit}/verbs/availableIn.ttl | 0 SGO/{sgo => ogit}/verbs/belongs.ttl | 0 SGO/{sgo => ogit}/verbs/beneficialOwnerOf.ttl | 0 SGO/{sgo => ogit}/verbs/beneficiaryOf.ttl | 0 SGO/{sgo => ogit}/verbs/bills.ttl | 0 SGO/{sgo => ogit}/verbs/boardMemberOf.ttl | 0 SGO/{sgo => ogit}/verbs/bornIn.ttl | 0 SGO/{sgo => ogit}/verbs/calls.ttl | 0 SGO/{sgo => ogit}/verbs/capitalOf.ttl | 0 SGO/{sgo => ogit}/verbs/causes.ttl | 0 SGO/{sgo => ogit}/verbs/centerOf.ttl | 0 SGO/{sgo => ogit}/verbs/chairmanOf.ttl | 0 SGO/{sgo => ogit}/verbs/closes.ttl | 0 SGO/{sgo => ogit}/verbs/closest.ttl | 0 SGO/{sgo => ogit}/verbs/communicatesWith.ttl | 0 SGO/{sgo => ogit}/verbs/competes.ttl | 0 SGO/{sgo => ogit}/verbs/complianceOfficerOf.ttl | 0 SGO/{sgo => ogit}/verbs/complies.ttl | 0 SGO/{sgo => ogit}/verbs/concludes.ttl | 0 SGO/{sgo => ogit}/verbs/conducts.ttl | 0 SGO/{sgo => ogit}/verbs/configures.ttl | 0 SGO/{sgo => ogit}/verbs/conformsTo.ttl | 0 SGO/{sgo => ogit}/verbs/connects.ttl | 0 SGO/{sgo => ogit}/verbs/consistsOf.ttl | 0 SGO/{sgo => ogit}/verbs/consumes.ttl | 0 SGO/{sgo => ogit}/verbs/contains.ttl | 0 SGO/{sgo => ogit}/verbs/contractsFor.ttl | 0 SGO/{sgo => ogit}/verbs/contributes.ttl | 0 SGO/{sgo => ogit}/verbs/controlledBy.ttl | 0 SGO/{sgo => ogit}/verbs/corresponds.ttl | 0 SGO/{sgo => ogit}/verbs/covers.ttl | 0 SGO/{sgo => ogit}/verbs/creates.ttl | 0 SGO/{sgo => ogit}/verbs/custodianOf.ttl | 0 SGO/{sgo => ogit}/verbs/defines.ttl | 0 SGO/{sgo => ogit}/verbs/deliversTo.ttl | 0 SGO/{sgo => ogit}/verbs/dependsOn.ttl | 0 SGO/{sgo => ogit}/verbs/deployedTo.ttl | 0 SGO/{sgo => ogit}/verbs/derivesFrom.ttl | 0 SGO/{sgo => ogit}/verbs/describes.ttl | 0 SGO/{sgo => ogit}/verbs/desires.ttl | 0 SGO/{sgo => ogit}/verbs/directorOf.ttl | 0 SGO/{sgo => ogit}/verbs/dislikes.ttl | 0 SGO/{sgo => ogit}/verbs/employs.ttl | 0 SGO/{sgo => ogit}/verbs/endorses.ttl | 0 SGO/{sgo => ogit}/verbs/executorOf.ttl | 0 SGO/{sgo => ogit}/verbs/extends.ttl | 0 SGO/{sgo => ogit}/verbs/follows.ttl | 0 SGO/{sgo => ogit}/verbs/forks.ttl | 0 SGO/{sgo => ogit}/verbs/generatedFrom.ttl | 0 SGO/{sgo => ogit}/verbs/generates.ttl | 0 SGO/{sgo => ogit}/verbs/governs.ttl | 0 SGO/{sgo => ogit}/verbs/has.ttl | 0 SGO/{sgo => ogit}/verbs/hasChild.ttl | 0 SGO/{sgo => ogit}/verbs/hasCousin.ttl | 0 SGO/{sgo => ogit}/verbs/hasFormerSpouse.ttl | 0 SGO/{sgo => ogit}/verbs/hasGrandchild.ttl | 0 SGO/{sgo => ogit}/verbs/hasGrandparent.ttl | 0 SGO/{sgo => ogit}/verbs/hasGuardian.ttl | 0 SGO/{sgo => ogit}/verbs/hasInLaw.ttl | 0 SGO/{sgo => ogit}/verbs/hasNationality.ttl | 0 SGO/{sgo => ogit}/verbs/hasNieceNephew.ttl | 0 SGO/{sgo => ogit}/verbs/hasParent.ttl | 0 SGO/{sgo => ogit}/verbs/hasSibling.ttl | 0 SGO/{sgo => ogit}/verbs/hasSpouse.ttl | 0 SGO/{sgo => ogit}/verbs/hasUncleAunt.ttl | 0 SGO/{sgo => ogit}/verbs/heirOf.ttl | 0 SGO/{sgo => ogit}/verbs/hiddenBy.ttl | 0 SGO/{sgo => ogit}/verbs/holds.ttl | 0 SGO/{sgo => ogit}/verbs/hosts.ttl | 0 SGO/{sgo => ogit}/verbs/ignores.ttl | 0 SGO/{sgo => ogit}/verbs/implements.ttl | 0 SGO/{sgo => ogit}/verbs/includes.ttl | 0 SGO/{sgo => ogit}/verbs/installs.ttl | 0 SGO/{sgo => ogit}/verbs/investmentManagerOf.ttl | 0 SGO/{sgo => ogit}/verbs/invites.ttl | 0 SGO/{sgo => ogit}/verbs/isEntitledTo.ttl | 0 SGO/{sgo => ogit}/verbs/isMemberOf.ttl | 0 SGO/{sgo => ogit}/verbs/isPartOf.ttl | 0 SGO/{sgo => ogit}/verbs/isPresent.ttl | 0 SGO/{sgo => ogit}/verbs/isResponsibleFor.ttl | 0 SGO/{sgo => ogit}/verbs/issues.ttl | 0 SGO/{sgo => ogit}/verbs/leads.ttl | 0 SGO/{sgo => ogit}/verbs/likes.ttl | 0 SGO/{sgo => ogit}/verbs/liquidatorOf.ttl | 0 SGO/{sgo => ogit}/verbs/listedAt.ttl | 0 SGO/{sgo => ogit}/verbs/lobbyistFor.ttl | 0 SGO/{sgo => ogit}/verbs/locatedAt.ttl | 0 SGO/{sgo => ogit}/verbs/locatedIn.ttl | 0 SGO/{sgo => ogit}/verbs/madeOf.ttl | 0 SGO/{sgo => ogit}/verbs/manages.ttl | 0 SGO/{sgo => ogit}/verbs/mergedWith.ttl | 0 SGO/{sgo => ogit}/verbs/moderates.ttl | 0 SGO/{sgo => ogit}/verbs/nomineeFor.ttl | 0 SGO/{sgo => ogit}/verbs/officerOf.ttl | 0 SGO/{sgo => ogit}/verbs/opens.ttl | 0 SGO/{sgo => ogit}/verbs/organizes.ttl | 0 SGO/{sgo => ogit}/verbs/originatesIn.ttl | 0 SGO/{sgo => ogit}/verbs/overrides.ttl | 0 SGO/{sgo => ogit}/verbs/owns.ttl | 0 SGO/{sgo => ogit}/verbs/partneredWith.ttl | 0 SGO/{sgo => ogit}/verbs/performs.ttl | 0 SGO/{sgo => ogit}/verbs/plans.ttl | 0 SGO/{sgo => ogit}/verbs/precedes.ttl | 0 SGO/{sgo => ogit}/verbs/prioritizes.ttl | 0 SGO/{sgo => ogit}/verbs/produces.ttl | 0 SGO/{sgo => ogit}/verbs/protectorOf.ttl | 0 SGO/{sgo => ogit}/verbs/proves.ttl | 0 SGO/{sgo => ogit}/verbs/provides.ttl | 0 SGO/{sgo => ogit}/verbs/providesServicesTo.ttl | 0 SGO/{sgo => ogit}/verbs/publishes.ttl | 0 SGO/{sgo => ogit}/verbs/rates.ttl | 0 SGO/{sgo => ogit}/verbs/readBy.ttl | 0 SGO/{sgo => ogit}/verbs/receiverFor.ttl | 0 SGO/{sgo => ogit}/verbs/receives.ttl | 0 SGO/{sgo => ogit}/verbs/receivesFrom.ttl | 0 SGO/{sgo => ogit}/verbs/recommends.ttl | 0 SGO/{sgo => ogit}/verbs/references.ttl | 0 SGO/{sgo => ogit}/verbs/registeredAt.ttl | 0 SGO/{sgo => ogit}/verbs/registers.ttl | 0 SGO/{sgo => ogit}/verbs/rejects.ttl | 0 SGO/{sgo => ogit}/verbs/relates.ttl | 0 SGO/{sgo => ogit}/verbs/repliedWith.ttl | 0 SGO/{sgo => ogit}/verbs/reportedOn.ttl | 0 SGO/{sgo => ogit}/verbs/reports.ttl | 0 SGO/{sgo => ogit}/verbs/represents.ttl | 0 SGO/{sgo => ogit}/verbs/requests.ttl | 0 SGO/{sgo => ogit}/verbs/requires.ttl | 0 SGO/{sgo => ogit}/verbs/residesIn.ttl | 0 SGO/{sgo => ogit}/verbs/resolves.ttl | 0 SGO/{sgo => ogit}/verbs/responds.ttl | 0 SGO/{sgo => ogit}/verbs/reviews.ttl | 0 SGO/{sgo => ogit}/verbs/runsOn.ttl | 0 SGO/{sgo => ogit}/verbs/sameAs.ttl | 0 SGO/{sgo => ogit}/verbs/seenBy.ttl | 0 SGO/{sgo => ogit}/verbs/sells.ttl | 0 SGO/{sgo => ogit}/verbs/sellsTo.ttl | 0 SGO/{sgo => ogit}/verbs/sends.ttl | 0 SGO/{sgo => ogit}/verbs/settlorOf.ttl | 0 SGO/{sgo => ogit}/verbs/signatoryFor.ttl | 0 SGO/{sgo => ogit}/verbs/soldTo.ttl | 0 SGO/{sgo => ogit}/verbs/solves.ttl | 0 SGO/{sgo => ogit}/verbs/specifies.ttl | 0 SGO/{sgo => ogit}/verbs/subscribes.ttl | 0 SGO/{sgo => ogit}/verbs/subsidiaryOf.ttl | 0 SGO/{sgo => ogit}/verbs/supervises.ttl | 0 SGO/{sgo => ogit}/verbs/supports.ttl | 0 SGO/{sgo => ogit}/verbs/tracks.ttl | 0 SGO/{sgo => ogit}/verbs/transfers.ttl | 0 SGO/{sgo => ogit}/verbs/triggers.ttl | 0 SGO/{sgo => ogit}/verbs/trusteeOf.ttl | 0 SGO/{sgo => ogit}/verbs/updates.ttl | 0 SGO/{sgo => ogit}/verbs/uses.ttl | 0 SGO/{sgo => ogit}/verbs/utilizes.ttl | 0 SGO/{sgo => ogit}/verbs/validFor.ttl | 0 SGO/{sgo => ogit}/verbs/versions.ttl | 0 SGO/{sgo => ogit}/verbs/virtualizes.ttl | 0 SGO/{sgo => ogit}/verbs/wasBestManFor.ttl | 0 SGO/{sgo => ogit}/verbs/wasBridesmaidFor.ttl | 0 SGO/{sgo => ogit}/verbs/wasEngagedTo.ttl | 0 SGO/{sgo => ogit}/verbs/wasGroomsmanFor.ttl | 0 SGO/{sgo => ogit}/verbs/wasMaidOfHonorFor.ttl | 0 SGO/{sgo => ogit}/verbs/wasOfficiantFor.ttl | 0 SGO/{sgo => ogit}/verbs/wasWeddingWitnessFor.ttl | 0 .../verbs/whollyOwnedSubsidiaryOf.ttl | 0 SGO/{sgo => ogit}/verbs/wins.ttl | 0 SGO/{sgo => ogit}/verbs/worksOn.ttl | 0 SGO/sgo/README.md | 10 ---------- validate.sh | 2 +- 503 files changed, 18 insertions(+), 17 deletions(-) rename SGO/{sgo => ogit}/attributes/BatteryState.ttl (100%) rename SGO/{sgo => ogit}/attributes/accessControl.ttl (100%) rename SGO/{sgo => ogit}/attributes/acknowledgeState.ttl (100%) rename SGO/{sgo => ogit}/attributes/addressLocality.ttl (100%) rename SGO/{sgo => ogit}/attributes/alias.ttl (100%) rename SGO/{sgo => ogit}/attributes/alternativeName.ttl (100%) rename SGO/{sgo => ogit}/attributes/altitude.ttl (100%) rename SGO/{sgo => ogit}/attributes/amount.ttl (100%) rename SGO/{sgo => ogit}/attributes/area.ttl (100%) rename SGO/{sgo => ogit}/attributes/asset.ttl (100%) rename SGO/{sgo => ogit}/attributes/assetTag.ttl (100%) rename SGO/{sgo => ogit}/attributes/assignedAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/assignedGroup.ttl (100%) rename SGO/{sgo => ogit}/attributes/attachmentID.ttl (100%) rename SGO/{sgo => ogit}/attributes/author.ttl (100%) rename SGO/{sgo => ogit}/attributes/availability.ttl (100%) rename SGO/{sgo => ogit}/attributes/birthplace.ttl (100%) rename SGO/{sgo => ogit}/attributes/brand.ttl (100%) rename SGO/{sgo => ogit}/attributes/buildingId.ttl (100%) rename SGO/{sgo => ogit}/attributes/businessCategory.ttl (100%) rename SGO/{sgo => ogit}/attributes/businessCriticality.ttl (100%) rename SGO/{sgo => ogit}/attributes/capacity.ttl (100%) rename SGO/{sgo => ogit}/attributes/capacityAvailable.ttl (100%) rename SGO/{sgo => ogit}/attributes/category.ttl (100%) rename SGO/{sgo => ogit}/attributes/certainty.ttl (100%) rename SGO/{sgo => ogit}/attributes/changeLog.ttl (100%) rename SGO/{sgo => ogit}/attributes/checkedInAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/checkedOutAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/ciType.ttl (100%) rename SGO/{sgo => ogit}/attributes/city.ttl (100%) rename SGO/{sgo => ogit}/attributes/class.ttl (100%) rename SGO/{sgo => ogit}/attributes/classification.ttl (100%) rename SGO/{sgo => ogit}/attributes/cleanContent.ttl (100%) rename SGO/{sgo => ogit}/attributes/closedAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/codeType.ttl (100%) rename SGO/{sgo => ogit}/attributes/color.ttl (100%) rename SGO/{sgo => ogit}/attributes/comment.ttl (100%) rename SGO/{sgo => ogit}/attributes/condition.ttl (100%) rename SGO/{sgo => ogit}/attributes/confidence.ttl (100%) rename SGO/{sgo => ogit}/attributes/confidentiality.ttl (100%) rename SGO/{sgo => ogit}/attributes/connectorId.ttl (100%) rename SGO/{sgo => ogit}/attributes/consentLevel.ttl (100%) rename SGO/{sgo => ogit}/attributes/contact.ttl (100%) rename SGO/{sgo => ogit}/attributes/content.ttl (100%) rename SGO/{sgo => ogit}/attributes/coordinate.ttl (100%) rename SGO/{sgo => ogit}/attributes/country.ttl (100%) rename SGO/{sgo => ogit}/attributes/createdAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/createdBy.ttl (100%) rename SGO/{sgo => ogit}/attributes/creationTime.ttl (100%) rename SGO/{sgo => ogit}/attributes/creator.ttl (100%) rename SGO/{sgo => ogit}/attributes/currency.ttl (100%) rename SGO/{sgo => ogit}/attributes/dateOfBirth.ttl (100%) rename SGO/{sgo => ogit}/attributes/dateOfDeath.ttl (100%) rename SGO/{sgo => ogit}/attributes/dayOfWeek.ttl (100%) rename SGO/{sgo => ogit}/attributes/deadline.ttl (100%) rename SGO/{sgo => ogit}/attributes/deliveredAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/description.ttl (100%) rename SGO/{sgo => ogit}/attributes/duration.ttl (100%) rename SGO/{sgo => ogit}/attributes/durationUnit.ttl (100%) rename SGO/{sgo => ogit}/attributes/effort.ttl (100%) rename SGO/{sgo => ogit}/attributes/email.ttl (100%) rename SGO/{sgo => ogit}/attributes/endOfWarranty.ttl (100%) rename SGO/{sgo => ogit}/attributes/endedAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/enumValues.ttl (100%) rename SGO/{sgo => ogit}/attributes/expirationDate.ttl (100%) rename SGO/{sgo => ogit}/attributes/expiresAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/externalId.ttl (100%) rename SGO/{sgo => ogit}/attributes/faultCount.ttl (100%) rename SGO/{sgo => ogit}/attributes/favorite.ttl (100%) rename SGO/{sgo => ogit}/attributes/fax.ttl (100%) rename SGO/{sgo => ogit}/attributes/finishedAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/firstName.ttl (100%) rename SGO/{sgo => ogit}/attributes/firstOccurredAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/followers.ttl (100%) rename SGO/{sgo => ogit}/attributes/foundingDate.ttl (100%) rename SGO/{sgo => ogit}/attributes/frequency.ttl (100%) rename SGO/{sgo => ogit}/attributes/function.ttl (100%) rename SGO/{sgo => ogit}/attributes/gender.ttl (100%) rename SGO/{sgo => ogit}/attributes/id.ttl (100%) rename SGO/{sgo => ogit}/attributes/identifierCode.ttl (100%) rename SGO/{sgo => ogit}/attributes/impact.ttl (100%) rename SGO/{sgo => ogit}/attributes/information.ttl (100%) rename SGO/{sgo => ogit}/attributes/installStatus.ttl (100%) rename SGO/{sgo => ogit}/attributes/installedAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/instance.ttl (100%) rename SGO/{sgo => ogit}/attributes/integrity.ttl (100%) rename SGO/{sgo => ogit}/attributes/inventoryNumber.ttl (100%) rename SGO/{sgo => ogit}/attributes/invoiceNumber.ttl (100%) rename SGO/{sgo => ogit}/attributes/ipAddress.ttl (100%) rename SGO/{sgo => ogit}/attributes/isCritical.ttl (100%) rename SGO/{sgo => ogit}/attributes/isInternal.ttl (100%) rename SGO/{sgo => ogit}/attributes/isMutable.ttl (100%) rename SGO/{sgo => ogit}/attributes/isPermanent.ttl (100%) rename SGO/{sgo => ogit}/attributes/isRoot.ttl (100%) rename SGO/{sgo => ogit}/attributes/isSupported.ttl (100%) rename SGO/{sgo => ogit}/attributes/isValid.ttl (100%) rename SGO/{sgo => ogit}/attributes/justification.ttl (100%) rename SGO/{sgo => ogit}/attributes/language.ttl (100%) rename SGO/{sgo => ogit}/attributes/lastClearedAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/lastName.ttl (100%) rename SGO/{sgo => ogit}/attributes/lastOccurredAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/lastScannedAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/lastUpdatedAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/lastUpdatedBy.ttl (100%) rename SGO/{sgo => ogit}/attributes/latestVersion.ttl (100%) rename SGO/{sgo => ogit}/attributes/latitude.ttl (100%) rename SGO/{sgo => ogit}/attributes/leaseContract.ttl (100%) rename SGO/{sgo => ogit}/attributes/lengthOfReportingPeriod.ttl (100%) rename SGO/{sgo => ogit}/attributes/licenseId.ttl (100%) rename SGO/{sgo => ogit}/attributes/licenseKey.ttl (100%) rename SGO/{sgo => ogit}/attributes/licenseRequestStatus.ttl (100%) rename SGO/{sgo => ogit}/attributes/licenseSubject.ttl (100%) rename SGO/{sgo => ogit}/attributes/licenseType.ttl (100%) rename SGO/{sgo => ogit}/attributes/locationAcquisitionTime.ttl (100%) rename SGO/{sgo => ogit}/attributes/locationPrecision.ttl (100%) rename SGO/{sgo => ogit}/attributes/locked.ttl (100%) rename SGO/{sgo => ogit}/attributes/longitude.ttl (100%) rename SGO/{sgo => ogit}/attributes/lowerLimit.ttl (100%) rename SGO/{sgo => ogit}/attributes/macAddress.ttl (100%) rename SGO/{sgo => ogit}/attributes/maintenanceState.ttl (100%) rename SGO/{sgo => ogit}/attributes/manufacturer.ttl (100%) rename SGO/{sgo => ogit}/attributes/market.ttl (100%) rename SGO/{sgo => ogit}/attributes/message.ttl (100%) rename SGO/{sgo => ogit}/attributes/middleName.ttl (100%) rename SGO/{sgo => ogit}/attributes/mimeType.ttl (100%) rename SGO/{sgo => ogit}/attributes/mobilePhone.ttl (100%) rename SGO/{sgo => ogit}/attributes/mode.ttl (100%) rename SGO/{sgo => ogit}/attributes/model.ttl (100%) rename SGO/{sgo => ogit}/attributes/modelNumber.ttl (100%) rename SGO/{sgo => ogit}/attributes/modificationTime.ttl (100%) rename SGO/{sgo => ogit}/attributes/name.ttl (100%) rename SGO/{sgo => ogit}/attributes/negativeScore.ttl (100%) rename SGO/{sgo => ogit}/attributes/notification.ttl (100%) rename SGO/{sgo => ogit}/attributes/numberOfChildren.ttl (100%) rename SGO/{sgo => ogit}/attributes/occurenceCount.ttl (100%) rename SGO/{sgo => ogit}/attributes/officePhone.ttl (100%) rename SGO/{sgo => ogit}/attributes/onAttribute.ttl (100%) rename SGO/{sgo => ogit}/attributes/onVertex.ttl (100%) rename SGO/{sgo => ogit}/attributes/openedAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/operation.ttl (100%) rename SGO/{sgo => ogit}/attributes/operationalStatus.ttl (100%) rename SGO/{sgo => ogit}/attributes/orderedAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/otherPhone.ttl (100%) rename SGO/{sgo => ogit}/attributes/parentId.ttl (100%) rename SGO/{sgo => ogit}/attributes/passportNumber.ttl (100%) rename SGO/{sgo => ogit}/attributes/pendingChange.ttl (100%) rename SGO/{sgo => ogit}/attributes/phone.ttl (100%) rename SGO/{sgo => ogit}/attributes/placement.ttl (100%) rename SGO/{sgo => ogit}/attributes/plannedFinishDate.ttl (100%) rename SGO/{sgo => ogit}/attributes/plannedStartDate.ttl (100%) rename SGO/{sgo => ogit}/attributes/polarity.ttl (100%) rename SGO/{sgo => ogit}/attributes/position.ttl (100%) rename SGO/{sgo => ogit}/attributes/positionNumber.ttl (100%) rename SGO/{sgo => ogit}/attributes/positiveScore.ttl (100%) rename SGO/{sgo => ogit}/attributes/postalCode.ttl (100%) rename SGO/{sgo => ogit}/attributes/powerConsumption.ttl (100%) rename SGO/{sgo => ogit}/attributes/priority.ttl (100%) rename SGO/{sgo => ogit}/attributes/productOrderNumber.ttl (100%) rename SGO/{sgo => ogit}/attributes/profession.ttl (100%) rename SGO/{sgo => ogit}/attributes/project.ttl (100%) rename SGO/{sgo => ogit}/attributes/public.ttl (100%) rename SGO/{sgo => ogit}/attributes/publishedAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/purchaseDate.ttl (100%) rename SGO/{sgo => ogit}/attributes/purchasedAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/question.ttl (100%) rename SGO/{sgo => ogit}/attributes/range.ttl (100%) rename SGO/{sgo => ogit}/attributes/rank.ttl (100%) rename SGO/{sgo => ogit}/attributes/reason.ttl (100%) rename SGO/{sgo => ogit}/attributes/recipients.ttl (100%) rename SGO/{sgo => ogit}/attributes/religion.ttl (100%) rename SGO/{sgo => ogit}/attributes/reportedAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/reportedBy.ttl (100%) rename SGO/{sgo => ogit}/attributes/resource.ttl (100%) rename SGO/{sgo => ogit}/attributes/response.ttl (100%) rename SGO/{sgo => ogit}/attributes/reviewedAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/reviewedBy.ttl (100%) rename SGO/{sgo => ogit}/attributes/revision.ttl (100%) rename SGO/{sgo => ogit}/attributes/revokedAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/risk.ttl (100%) rename SGO/{sgo => ogit}/attributes/schedule.ttl (100%) rename SGO/{sgo => ogit}/attributes/section.ttl (100%) rename SGO/{sgo => ogit}/attributes/securityClass.ttl (100%) rename SGO/{sgo => ogit}/attributes/serialNumber.ttl (100%) rename SGO/{sgo => ogit}/attributes/serviceContract.ttl (100%) rename SGO/{sgo => ogit}/attributes/severity.ttl (100%) rename SGO/{sgo => ogit}/attributes/sharedWith.ttl (100%) rename SGO/{sgo => ogit}/attributes/shortDescription.ttl (100%) rename SGO/{sgo => ogit}/attributes/size.ttl (100%) rename SGO/{sgo => ogit}/attributes/source.ttl (100%) rename SGO/{sgo => ogit}/attributes/sourceId.ttl (100%) rename SGO/{sgo => ogit}/attributes/sourceTable.ttl (100%) rename SGO/{sgo => ogit}/attributes/soxClass.ttl (100%) rename SGO/{sgo => ogit}/attributes/startOfWarranty.ttl (100%) rename SGO/{sgo => ogit}/attributes/startedAt.ttl (100%) rename SGO/{sgo => ogit}/attributes/status.ttl (100%) rename SGO/{sgo => ogit}/attributes/streetAddress.ttl (100%) rename SGO/{sgo => ogit}/attributes/subCategory.ttl (100%) rename SGO/{sgo => ogit}/attributes/subType.ttl (100%) rename SGO/{sgo => ogit}/attributes/subject.ttl (100%) rename SGO/{sgo => ogit}/attributes/summary.ttl (100%) rename SGO/{sgo => ogit}/attributes/synonyms.ttl (100%) rename SGO/{sgo => ogit}/attributes/tags.ttl (100%) rename SGO/{sgo => ogit}/attributes/taskLog.ttl (100%) rename SGO/{sgo => ogit}/attributes/tenantId.ttl (100%) rename SGO/{sgo => ogit}/attributes/timeZone.ttl (100%) rename SGO/{sgo => ogit}/attributes/timestamp.ttl (100%) rename SGO/{sgo => ogit}/attributes/title.ttl (100%) rename SGO/{sgo => ogit}/attributes/token.ttl (100%) rename SGO/{sgo => ogit}/attributes/tone.ttl (100%) rename SGO/{sgo => ogit}/attributes/type.ttl (100%) rename SGO/{sgo => ogit}/attributes/unit.ttl (100%) rename SGO/{sgo => ogit}/attributes/unitDescription.ttl (100%) rename SGO/{sgo => ogit}/attributes/updateCount.ttl (100%) rename SGO/{sgo => ogit}/attributes/upperLimit.ttl (100%) rename SGO/{sgo => ogit}/attributes/urgency.ttl (100%) rename SGO/{sgo => ogit}/attributes/uri.ttl (100%) rename SGO/{sgo => ogit}/attributes/url.ttl (100%) rename SGO/{sgo => ogit}/attributes/validFrom.ttl (100%) rename SGO/{sgo => ogit}/attributes/validTo.ttl (100%) rename SGO/{sgo => ogit}/attributes/value.ttl (100%) rename SGO/{sgo => ogit}/attributes/valueDate.ttl (100%) rename SGO/{sgo => ogit}/attributes/values.ttl (100%) rename SGO/{sgo => ogit}/attributes/vendor.ttl (100%) rename SGO/{sgo => ogit}/attributes/version.ttl (100%) rename SGO/{sgo => ogit}/attributes/webPage.ttl (100%) rename SGO/{sgo => ogit}/attributes/weight.ttl (100%) rename SGO/{sgo => ogit}/attributes/yearOfBirth.ttl (100%) rename SGO/{sgo => ogit}/attributes/zipCode.ttl (100%) rename SGO/{ => ogit}/core/attributes/_c-id.ttl (100%) rename SGO/{ => ogit}/core/attributes/_content.ttl (100%) rename SGO/{ => ogit}/core/attributes/_created-on.ttl (100%) rename SGO/{ => ogit}/core/attributes/_creator-app.ttl (100%) rename SGO/{ => ogit}/core/attributes/_creator.ttl (100%) rename SGO/{ => ogit}/core/attributes/_deleted-by-app.ttl (100%) rename SGO/{ => ogit}/core/attributes/_deleted-by.ttl (100%) rename SGO/{ => ogit}/core/attributes/_deleted-on.ttl (100%) rename SGO/{ => ogit}/core/attributes/_edge-id.ttl (100%) rename SGO/{ => ogit}/core/attributes/_graphtype.ttl (100%) rename SGO/{ => ogit}/core/attributes/_id.ttl (100%) rename SGO/{ => ogit}/core/attributes/_is-deleted.ttl (100%) rename SGO/{ => ogit}/core/attributes/_modified-by-app.ttl (100%) rename SGO/{ => ogit}/core/attributes/_modified-by.ttl (100%) rename SGO/{ => ogit}/core/attributes/_modified-on.ttl (100%) rename SGO/{ => ogit}/core/attributes/_organization.ttl (100%) rename SGO/{ => ogit}/core/attributes/_owner.ttl (100%) rename SGO/{ => ogit}/core/attributes/_reader.ttl (100%) rename SGO/{ => ogit}/core/attributes/_scope.ttl (100%) rename SGO/{ => ogit}/core/attributes/_source.ttl (100%) rename SGO/{ => ogit}/core/attributes/_tags.ttl (100%) rename SGO/{ => ogit}/core/attributes/_type.ttl (100%) rename SGO/{ => ogit}/core/attributes/_v-id.ttl (100%) rename SGO/{ => ogit}/core/attributes/_v.ttl (100%) rename SGO/{ => ogit}/core/attributes/_version.ttl (100%) rename SGO/{ => ogit}/core/attributes/_xid.ttl (100%) rename SGO/{ => ogit}/core/entities/Node.ttl (100%) rename SGO/{sgo => ogit}/entities/Account.ttl (100%) rename SGO/{sgo => ogit}/entities/Agent.ttl (100%) rename SGO/{sgo => ogit}/entities/Alert.ttl (100%) rename SGO/{sgo => ogit}/entities/Annotation.ttl (100%) rename SGO/{sgo => ogit}/entities/Asset.ttl (100%) rename SGO/{sgo => ogit}/entities/Attachment.ttl (100%) rename SGO/{sgo => ogit}/entities/Blob.ttl (100%) rename SGO/{sgo => ogit}/entities/Catalog.ttl (100%) rename SGO/{sgo => ogit}/entities/CatalogItem.ttl (100%) rename SGO/{sgo => ogit}/entities/Category.ttl (100%) rename SGO/{sgo => ogit}/entities/Certificate.ttl (100%) rename SGO/{sgo => ogit}/entities/Comment.ttl (100%) rename SGO/{sgo => ogit}/entities/Configuration.ttl (100%) rename SGO/{sgo => ogit}/entities/ConfigurationItem.ttl (100%) rename SGO/{sgo => ogit}/entities/Contract.ttl (100%) rename SGO/{sgo => ogit}/entities/Course.ttl (100%) rename SGO/{sgo => ogit}/entities/CustomApplicationData.ttl (100%) rename SGO/{sgo => ogit}/entities/Device.ttl (100%) rename SGO/{sgo => ogit}/entities/Email.ttl (100%) rename SGO/{sgo => ogit}/entities/Environment.ttl (100%) rename SGO/{sgo => ogit}/entities/Equivalence.ttl (100%) rename SGO/{sgo => ogit}/entities/Event.ttl (100%) rename SGO/{sgo => ogit}/entities/Feature.ttl (100%) rename SGO/{sgo => ogit}/entities/Hyperedge.ttl (100%) rename SGO/{sgo => ogit}/entities/Hyperlink.ttl (100%) rename SGO/{sgo => ogit}/entities/Installation.ttl (100%) rename SGO/{sgo => ogit}/entities/Intent.ttl (100%) rename SGO/{sgo => ogit}/entities/Keyword.ttl (100%) rename SGO/{sgo => ogit}/entities/License.ttl (100%) rename SGO/{sgo => ogit}/entities/LicenseRequest.ttl (100%) rename SGO/{sgo => ogit}/entities/LicenseToken.ttl (100%) rename SGO/{sgo => ogit}/entities/Location.ttl (100%) rename SGO/{sgo => ogit}/entities/Note.ttl (100%) rename SGO/{sgo => ogit}/entities/Notification.ttl (100%) rename SGO/{sgo => ogit}/entities/Offer.ttl (100%) rename SGO/{sgo => ogit}/entities/Organization.ttl (100%) rename SGO/{sgo => ogit}/entities/Parameter.ttl (100%) rename SGO/{sgo => ogit}/entities/ParameterType.ttl (100%) rename SGO/{sgo => ogit}/entities/Penalty.ttl (100%) rename SGO/{sgo => ogit}/entities/Person.ttl (100%) rename SGO/{sgo => ogit}/entities/Policy.ttl (100%) rename SGO/{sgo => ogit}/entities/Product.ttl (100%) rename SGO/{sgo => ogit}/entities/Question.ttl (100%) rename SGO/{sgo => ogit}/entities/Rating.ttl (100%) rename SGO/{sgo => ogit}/entities/Region.ttl (100%) rename SGO/{sgo => ogit}/entities/Relevance.ttl (100%) rename SGO/{sgo => ogit}/entities/ReportedStatistic.ttl (100%) rename SGO/{sgo => ogit}/entities/Requirements.ttl (100%) rename SGO/{sgo => ogit}/entities/Role.ttl (100%) rename SGO/{sgo => ogit}/entities/RoleAssignment.ttl (100%) rename SGO/{sgo => ogit}/entities/Schema.ttl (100%) rename SGO/{sgo => ogit}/entities/Series.ttl (100%) rename SGO/{sgo => ogit}/entities/Status.ttl (100%) rename SGO/{sgo => ogit}/entities/Subscription.ttl (100%) rename SGO/{sgo => ogit}/entities/Tag.ttl (100%) rename SGO/{sgo => ogit}/entities/Task.ttl (100%) rename SGO/{sgo => ogit}/entities/TaskList.ttl (100%) rename SGO/{sgo => ogit}/entities/TermsAndConditions.ttl (100%) rename SGO/{sgo => ogit}/entities/Timeseries.ttl (100%) rename SGO/{sgo => ogit}/entities/Tone.ttl (100%) rename SGO/{sgo => ogit}/entities/Vcard.ttl (100%) rename SGO/{sgo => ogit}/entities/VersioningData.ttl (100%) rename SGO/{sgo => ogit}/verbs/accepts.ttl (100%) rename SGO/{sgo => ogit}/verbs/activates.ttl (100%) rename SGO/{sgo => ogit}/verbs/actsOnBehalfOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/administratorInInsolvencyOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/administratorOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/affects.ttl (100%) rename SGO/{sgo => ogit}/verbs/affiliateOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/alerts.ttl (100%) rename SGO/{sgo => ogit}/verbs/approves.ttl (100%) rename SGO/{sgo => ogit}/verbs/assignedTo.ttl (100%) rename SGO/{sgo => ogit}/verbs/associates.ttl (100%) rename SGO/{sgo => ogit}/verbs/assumes.ttl (100%) rename SGO/{sgo => ogit}/verbs/auditCommitteeMemberOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/auditorOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/availableIn.ttl (100%) rename SGO/{sgo => ogit}/verbs/belongs.ttl (100%) rename SGO/{sgo => ogit}/verbs/beneficialOwnerOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/beneficiaryOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/bills.ttl (100%) rename SGO/{sgo => ogit}/verbs/boardMemberOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/bornIn.ttl (100%) rename SGO/{sgo => ogit}/verbs/calls.ttl (100%) rename SGO/{sgo => ogit}/verbs/capitalOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/causes.ttl (100%) rename SGO/{sgo => ogit}/verbs/centerOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/chairmanOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/closes.ttl (100%) rename SGO/{sgo => ogit}/verbs/closest.ttl (100%) rename SGO/{sgo => ogit}/verbs/communicatesWith.ttl (100%) rename SGO/{sgo => ogit}/verbs/competes.ttl (100%) rename SGO/{sgo => ogit}/verbs/complianceOfficerOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/complies.ttl (100%) rename SGO/{sgo => ogit}/verbs/concludes.ttl (100%) rename SGO/{sgo => ogit}/verbs/conducts.ttl (100%) rename SGO/{sgo => ogit}/verbs/configures.ttl (100%) rename SGO/{sgo => ogit}/verbs/conformsTo.ttl (100%) rename SGO/{sgo => ogit}/verbs/connects.ttl (100%) rename SGO/{sgo => ogit}/verbs/consistsOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/consumes.ttl (100%) rename SGO/{sgo => ogit}/verbs/contains.ttl (100%) rename SGO/{sgo => ogit}/verbs/contractsFor.ttl (100%) rename SGO/{sgo => ogit}/verbs/contributes.ttl (100%) rename SGO/{sgo => ogit}/verbs/controlledBy.ttl (100%) rename SGO/{sgo => ogit}/verbs/corresponds.ttl (100%) rename SGO/{sgo => ogit}/verbs/covers.ttl (100%) rename SGO/{sgo => ogit}/verbs/creates.ttl (100%) rename SGO/{sgo => ogit}/verbs/custodianOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/defines.ttl (100%) rename SGO/{sgo => ogit}/verbs/deliversTo.ttl (100%) rename SGO/{sgo => ogit}/verbs/dependsOn.ttl (100%) rename SGO/{sgo => ogit}/verbs/deployedTo.ttl (100%) rename SGO/{sgo => ogit}/verbs/derivesFrom.ttl (100%) rename SGO/{sgo => ogit}/verbs/describes.ttl (100%) rename SGO/{sgo => ogit}/verbs/desires.ttl (100%) rename SGO/{sgo => ogit}/verbs/directorOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/dislikes.ttl (100%) rename SGO/{sgo => ogit}/verbs/employs.ttl (100%) rename SGO/{sgo => ogit}/verbs/endorses.ttl (100%) rename SGO/{sgo => ogit}/verbs/executorOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/extends.ttl (100%) rename SGO/{sgo => ogit}/verbs/follows.ttl (100%) rename SGO/{sgo => ogit}/verbs/forks.ttl (100%) rename SGO/{sgo => ogit}/verbs/generatedFrom.ttl (100%) rename SGO/{sgo => ogit}/verbs/generates.ttl (100%) rename SGO/{sgo => ogit}/verbs/governs.ttl (100%) rename SGO/{sgo => ogit}/verbs/has.ttl (100%) rename SGO/{sgo => ogit}/verbs/hasChild.ttl (100%) rename SGO/{sgo => ogit}/verbs/hasCousin.ttl (100%) rename SGO/{sgo => ogit}/verbs/hasFormerSpouse.ttl (100%) rename SGO/{sgo => ogit}/verbs/hasGrandchild.ttl (100%) rename SGO/{sgo => ogit}/verbs/hasGrandparent.ttl (100%) rename SGO/{sgo => ogit}/verbs/hasGuardian.ttl (100%) rename SGO/{sgo => ogit}/verbs/hasInLaw.ttl (100%) rename SGO/{sgo => ogit}/verbs/hasNationality.ttl (100%) rename SGO/{sgo => ogit}/verbs/hasNieceNephew.ttl (100%) rename SGO/{sgo => ogit}/verbs/hasParent.ttl (100%) rename SGO/{sgo => ogit}/verbs/hasSibling.ttl (100%) rename SGO/{sgo => ogit}/verbs/hasSpouse.ttl (100%) rename SGO/{sgo => ogit}/verbs/hasUncleAunt.ttl (100%) rename SGO/{sgo => ogit}/verbs/heirOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/hiddenBy.ttl (100%) rename SGO/{sgo => ogit}/verbs/holds.ttl (100%) rename SGO/{sgo => ogit}/verbs/hosts.ttl (100%) rename SGO/{sgo => ogit}/verbs/ignores.ttl (100%) rename SGO/{sgo => ogit}/verbs/implements.ttl (100%) rename SGO/{sgo => ogit}/verbs/includes.ttl (100%) rename SGO/{sgo => ogit}/verbs/installs.ttl (100%) rename SGO/{sgo => ogit}/verbs/investmentManagerOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/invites.ttl (100%) rename SGO/{sgo => ogit}/verbs/isEntitledTo.ttl (100%) rename SGO/{sgo => ogit}/verbs/isMemberOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/isPartOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/isPresent.ttl (100%) rename SGO/{sgo => ogit}/verbs/isResponsibleFor.ttl (100%) rename SGO/{sgo => ogit}/verbs/issues.ttl (100%) rename SGO/{sgo => ogit}/verbs/leads.ttl (100%) rename SGO/{sgo => ogit}/verbs/likes.ttl (100%) rename SGO/{sgo => ogit}/verbs/liquidatorOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/listedAt.ttl (100%) rename SGO/{sgo => ogit}/verbs/lobbyistFor.ttl (100%) rename SGO/{sgo => ogit}/verbs/locatedAt.ttl (100%) rename SGO/{sgo => ogit}/verbs/locatedIn.ttl (100%) rename SGO/{sgo => ogit}/verbs/madeOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/manages.ttl (100%) rename SGO/{sgo => ogit}/verbs/mergedWith.ttl (100%) rename SGO/{sgo => ogit}/verbs/moderates.ttl (100%) rename SGO/{sgo => ogit}/verbs/nomineeFor.ttl (100%) rename SGO/{sgo => ogit}/verbs/officerOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/opens.ttl (100%) rename SGO/{sgo => ogit}/verbs/organizes.ttl (100%) rename SGO/{sgo => ogit}/verbs/originatesIn.ttl (100%) rename SGO/{sgo => ogit}/verbs/overrides.ttl (100%) rename SGO/{sgo => ogit}/verbs/owns.ttl (100%) rename SGO/{sgo => ogit}/verbs/partneredWith.ttl (100%) rename SGO/{sgo => ogit}/verbs/performs.ttl (100%) rename SGO/{sgo => ogit}/verbs/plans.ttl (100%) rename SGO/{sgo => ogit}/verbs/precedes.ttl (100%) rename SGO/{sgo => ogit}/verbs/prioritizes.ttl (100%) rename SGO/{sgo => ogit}/verbs/produces.ttl (100%) rename SGO/{sgo => ogit}/verbs/protectorOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/proves.ttl (100%) rename SGO/{sgo => ogit}/verbs/provides.ttl (100%) rename SGO/{sgo => ogit}/verbs/providesServicesTo.ttl (100%) rename SGO/{sgo => ogit}/verbs/publishes.ttl (100%) rename SGO/{sgo => ogit}/verbs/rates.ttl (100%) rename SGO/{sgo => ogit}/verbs/readBy.ttl (100%) rename SGO/{sgo => ogit}/verbs/receiverFor.ttl (100%) rename SGO/{sgo => ogit}/verbs/receives.ttl (100%) rename SGO/{sgo => ogit}/verbs/receivesFrom.ttl (100%) rename SGO/{sgo => ogit}/verbs/recommends.ttl (100%) rename SGO/{sgo => ogit}/verbs/references.ttl (100%) rename SGO/{sgo => ogit}/verbs/registeredAt.ttl (100%) rename SGO/{sgo => ogit}/verbs/registers.ttl (100%) rename SGO/{sgo => ogit}/verbs/rejects.ttl (100%) rename SGO/{sgo => ogit}/verbs/relates.ttl (100%) rename SGO/{sgo => ogit}/verbs/repliedWith.ttl (100%) rename SGO/{sgo => ogit}/verbs/reportedOn.ttl (100%) rename SGO/{sgo => ogit}/verbs/reports.ttl (100%) rename SGO/{sgo => ogit}/verbs/represents.ttl (100%) rename SGO/{sgo => ogit}/verbs/requests.ttl (100%) rename SGO/{sgo => ogit}/verbs/requires.ttl (100%) rename SGO/{sgo => ogit}/verbs/residesIn.ttl (100%) rename SGO/{sgo => ogit}/verbs/resolves.ttl (100%) rename SGO/{sgo => ogit}/verbs/responds.ttl (100%) rename SGO/{sgo => ogit}/verbs/reviews.ttl (100%) rename SGO/{sgo => ogit}/verbs/runsOn.ttl (100%) rename SGO/{sgo => ogit}/verbs/sameAs.ttl (100%) rename SGO/{sgo => ogit}/verbs/seenBy.ttl (100%) rename SGO/{sgo => ogit}/verbs/sells.ttl (100%) rename SGO/{sgo => ogit}/verbs/sellsTo.ttl (100%) rename SGO/{sgo => ogit}/verbs/sends.ttl (100%) rename SGO/{sgo => ogit}/verbs/settlorOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/signatoryFor.ttl (100%) rename SGO/{sgo => ogit}/verbs/soldTo.ttl (100%) rename SGO/{sgo => ogit}/verbs/solves.ttl (100%) rename SGO/{sgo => ogit}/verbs/specifies.ttl (100%) rename SGO/{sgo => ogit}/verbs/subscribes.ttl (100%) rename SGO/{sgo => ogit}/verbs/subsidiaryOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/supervises.ttl (100%) rename SGO/{sgo => ogit}/verbs/supports.ttl (100%) rename SGO/{sgo => ogit}/verbs/tracks.ttl (100%) rename SGO/{sgo => ogit}/verbs/transfers.ttl (100%) rename SGO/{sgo => ogit}/verbs/triggers.ttl (100%) rename SGO/{sgo => ogit}/verbs/trusteeOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/updates.ttl (100%) rename SGO/{sgo => ogit}/verbs/uses.ttl (100%) rename SGO/{sgo => ogit}/verbs/utilizes.ttl (100%) rename SGO/{sgo => ogit}/verbs/validFor.ttl (100%) rename SGO/{sgo => ogit}/verbs/versions.ttl (100%) rename SGO/{sgo => ogit}/verbs/virtualizes.ttl (100%) rename SGO/{sgo => ogit}/verbs/wasBestManFor.ttl (100%) rename SGO/{sgo => ogit}/verbs/wasBridesmaidFor.ttl (100%) rename SGO/{sgo => ogit}/verbs/wasEngagedTo.ttl (100%) rename SGO/{sgo => ogit}/verbs/wasGroomsmanFor.ttl (100%) rename SGO/{sgo => ogit}/verbs/wasMaidOfHonorFor.ttl (100%) rename SGO/{sgo => ogit}/verbs/wasOfficiantFor.ttl (100%) rename SGO/{sgo => ogit}/verbs/wasWeddingWitnessFor.ttl (100%) rename SGO/{sgo => ogit}/verbs/whollyOwnedSubsidiaryOf.ttl (100%) rename SGO/{sgo => ogit}/verbs/wins.ttl (100%) rename SGO/{sgo => ogit}/verbs/worksOn.ttl (100%) delete mode 100644 SGO/sgo/README.md diff --git a/NTO/GFS/README.md b/NTO/GFS/README.md index a260c093b9..ba6437df72 100644 --- a/NTO/GFS/README.md +++ b/NTO/GFS/README.md @@ -36,7 +36,7 @@ with the OGIT review): `securityLevel` 0-100. - `ogit.Auth:usesDevice` -- Account-to-Device, many-to-many. - `ogit:hasVault` -- Person-to-DataScope anchor for Personal - Vaults (location open: `SGO/sgo/verbs/` or `NTO/Auth/verbs/`). + Vaults (location open: `SGO/ogit/verbs/` or `NTO/Auth/verbs/`). - A Workspace marker (boolean attribute) on `ogit.Auth:Team`. ## Audit diff --git a/NTO/HR/README.md b/NTO/HR/README.md index fec98b0709..42a5a7c143 100644 --- a/NTO/HR/README.md +++ b/NTO/HR/README.md @@ -120,7 +120,7 @@ Organization <--belongs-- Position <--describes-- JobDescription the time share, so its numbered sub-items are held as a list on it rather than promoted to siblings, which would invent shares the source does not state. - **`postNumber`, not `positionNumber`.** `ogit:positionNumber` already exists - in `SGO/sgo/attributes/` and means an ordinal -- "an integer, which displays a + in `SGO/ogit/attributes/` and means an ordinal -- "an integer, which displays a position of numbering" -- so it cannot carry an establishment-plan post identifier. - Generic attributes (`ogit:name`, `description`, `content`, `values`, `reason`, diff --git a/SGO/README.md b/SGO/README.md index 231b73b3fe..052a212827 100644 --- a/SGO/README.md +++ b/SGO/README.md @@ -2,8 +2,6 @@ This directory contains the following things: -* `core` contains the core ontology, i.e., concepts on the meta-model level. * `format` used to contain the format description of the ontology, see the description of [Basic Concepts](https://github.com/arago/OGIT/wiki/Basic-Concepts) instead. -* `ogit` contains the OGIT ontology itself. -* `sgo` contains the SGO (Semantic Graph Ontology) of OGIT. See the description of [Basic Concepts](https://github.com/arago/OGIT/wiki/Basic-Concepts) for more information. +* `ogit` contains every term in the root `ogit:` namespace: the SGO (Semantic Graph Ontology) of OGIT under `attributes`, `entities` and `verbs`, and the core ontology (concepts on the meta-model level) under `core`. See the description of [Basic Concepts](https://github.com/arago/OGIT/wiki/Basic-Concepts) for more information. diff --git a/SGO/ogit/README.md b/SGO/ogit/README.md index 0c46bae153..ba9950ec71 100644 --- a/SGO/ogit/README.md +++ b/SGO/ogit/README.md @@ -1,2 +1,15 @@ +### Overview -Here we define ontology objects whose instances nodes/edges will be used to described the ontology itself +This directory contains the terms in the root `ogit:` namespace +(`http://www.purl.org/ogit/`): + +* `attributes`, `entities`, `verbs`: the SGO (Semantic Graph Ontology) of OGIT, + and the ontology objects whose instance nodes and edges describe the + ontology itself. +* `core`: the core ontology, i.e. concepts on the meta-model level. + +They live under a directory named `ogit` because the validator +(`bin/ogit-validator.jar`) requires every file to sit below a directory named +after its namespace: `ogit:creates` must be at `.../ogit//creates.ttl`. + +Please refer to the [OGIT ontology details](https://github.com/almatoai/OGIT/wiki/OGIT-ontology-details) wiki page for an explanation of these concepts. diff --git a/SGO/sgo/attributes/BatteryState.ttl b/SGO/ogit/attributes/BatteryState.ttl similarity index 100% rename from SGO/sgo/attributes/BatteryState.ttl rename to SGO/ogit/attributes/BatteryState.ttl diff --git a/SGO/sgo/attributes/accessControl.ttl b/SGO/ogit/attributes/accessControl.ttl similarity index 100% rename from SGO/sgo/attributes/accessControl.ttl rename to SGO/ogit/attributes/accessControl.ttl diff --git a/SGO/sgo/attributes/acknowledgeState.ttl b/SGO/ogit/attributes/acknowledgeState.ttl similarity index 100% rename from SGO/sgo/attributes/acknowledgeState.ttl rename to SGO/ogit/attributes/acknowledgeState.ttl diff --git a/SGO/sgo/attributes/addressLocality.ttl b/SGO/ogit/attributes/addressLocality.ttl similarity index 100% rename from SGO/sgo/attributes/addressLocality.ttl rename to SGO/ogit/attributes/addressLocality.ttl diff --git a/SGO/sgo/attributes/alias.ttl b/SGO/ogit/attributes/alias.ttl similarity index 100% rename from SGO/sgo/attributes/alias.ttl rename to SGO/ogit/attributes/alias.ttl diff --git a/SGO/sgo/attributes/alternativeName.ttl b/SGO/ogit/attributes/alternativeName.ttl similarity index 100% rename from SGO/sgo/attributes/alternativeName.ttl rename to SGO/ogit/attributes/alternativeName.ttl diff --git a/SGO/sgo/attributes/altitude.ttl b/SGO/ogit/attributes/altitude.ttl similarity index 100% rename from SGO/sgo/attributes/altitude.ttl rename to SGO/ogit/attributes/altitude.ttl diff --git a/SGO/sgo/attributes/amount.ttl b/SGO/ogit/attributes/amount.ttl similarity index 100% rename from SGO/sgo/attributes/amount.ttl rename to SGO/ogit/attributes/amount.ttl diff --git a/SGO/sgo/attributes/area.ttl b/SGO/ogit/attributes/area.ttl similarity index 100% rename from SGO/sgo/attributes/area.ttl rename to SGO/ogit/attributes/area.ttl diff --git a/SGO/sgo/attributes/asset.ttl b/SGO/ogit/attributes/asset.ttl similarity index 100% rename from SGO/sgo/attributes/asset.ttl rename to SGO/ogit/attributes/asset.ttl diff --git a/SGO/sgo/attributes/assetTag.ttl b/SGO/ogit/attributes/assetTag.ttl similarity index 100% rename from SGO/sgo/attributes/assetTag.ttl rename to SGO/ogit/attributes/assetTag.ttl diff --git a/SGO/sgo/attributes/assignedAt.ttl b/SGO/ogit/attributes/assignedAt.ttl similarity index 100% rename from SGO/sgo/attributes/assignedAt.ttl rename to SGO/ogit/attributes/assignedAt.ttl diff --git a/SGO/sgo/attributes/assignedGroup.ttl b/SGO/ogit/attributes/assignedGroup.ttl similarity index 100% rename from SGO/sgo/attributes/assignedGroup.ttl rename to SGO/ogit/attributes/assignedGroup.ttl diff --git a/SGO/sgo/attributes/attachmentID.ttl b/SGO/ogit/attributes/attachmentID.ttl similarity index 100% rename from SGO/sgo/attributes/attachmentID.ttl rename to SGO/ogit/attributes/attachmentID.ttl diff --git a/SGO/sgo/attributes/author.ttl b/SGO/ogit/attributes/author.ttl similarity index 100% rename from SGO/sgo/attributes/author.ttl rename to SGO/ogit/attributes/author.ttl diff --git a/SGO/sgo/attributes/availability.ttl b/SGO/ogit/attributes/availability.ttl similarity index 100% rename from SGO/sgo/attributes/availability.ttl rename to SGO/ogit/attributes/availability.ttl diff --git a/SGO/sgo/attributes/birthplace.ttl b/SGO/ogit/attributes/birthplace.ttl similarity index 100% rename from SGO/sgo/attributes/birthplace.ttl rename to SGO/ogit/attributes/birthplace.ttl diff --git a/SGO/sgo/attributes/brand.ttl b/SGO/ogit/attributes/brand.ttl similarity index 100% rename from SGO/sgo/attributes/brand.ttl rename to SGO/ogit/attributes/brand.ttl diff --git a/SGO/sgo/attributes/buildingId.ttl b/SGO/ogit/attributes/buildingId.ttl similarity index 100% rename from SGO/sgo/attributes/buildingId.ttl rename to SGO/ogit/attributes/buildingId.ttl diff --git a/SGO/sgo/attributes/businessCategory.ttl b/SGO/ogit/attributes/businessCategory.ttl similarity index 100% rename from SGO/sgo/attributes/businessCategory.ttl rename to SGO/ogit/attributes/businessCategory.ttl diff --git a/SGO/sgo/attributes/businessCriticality.ttl b/SGO/ogit/attributes/businessCriticality.ttl similarity index 100% rename from SGO/sgo/attributes/businessCriticality.ttl rename to SGO/ogit/attributes/businessCriticality.ttl diff --git a/SGO/sgo/attributes/capacity.ttl b/SGO/ogit/attributes/capacity.ttl similarity index 100% rename from SGO/sgo/attributes/capacity.ttl rename to SGO/ogit/attributes/capacity.ttl diff --git a/SGO/sgo/attributes/capacityAvailable.ttl b/SGO/ogit/attributes/capacityAvailable.ttl similarity index 100% rename from SGO/sgo/attributes/capacityAvailable.ttl rename to SGO/ogit/attributes/capacityAvailable.ttl diff --git a/SGO/sgo/attributes/category.ttl b/SGO/ogit/attributes/category.ttl similarity index 100% rename from SGO/sgo/attributes/category.ttl rename to SGO/ogit/attributes/category.ttl diff --git a/SGO/sgo/attributes/certainty.ttl b/SGO/ogit/attributes/certainty.ttl similarity index 100% rename from SGO/sgo/attributes/certainty.ttl rename to SGO/ogit/attributes/certainty.ttl diff --git a/SGO/sgo/attributes/changeLog.ttl b/SGO/ogit/attributes/changeLog.ttl similarity index 100% rename from SGO/sgo/attributes/changeLog.ttl rename to SGO/ogit/attributes/changeLog.ttl diff --git a/SGO/sgo/attributes/checkedInAt.ttl b/SGO/ogit/attributes/checkedInAt.ttl similarity index 100% rename from SGO/sgo/attributes/checkedInAt.ttl rename to SGO/ogit/attributes/checkedInAt.ttl diff --git a/SGO/sgo/attributes/checkedOutAt.ttl b/SGO/ogit/attributes/checkedOutAt.ttl similarity index 100% rename from SGO/sgo/attributes/checkedOutAt.ttl rename to SGO/ogit/attributes/checkedOutAt.ttl diff --git a/SGO/sgo/attributes/ciType.ttl b/SGO/ogit/attributes/ciType.ttl similarity index 100% rename from SGO/sgo/attributes/ciType.ttl rename to SGO/ogit/attributes/ciType.ttl diff --git a/SGO/sgo/attributes/city.ttl b/SGO/ogit/attributes/city.ttl similarity index 100% rename from SGO/sgo/attributes/city.ttl rename to SGO/ogit/attributes/city.ttl diff --git a/SGO/sgo/attributes/class.ttl b/SGO/ogit/attributes/class.ttl similarity index 100% rename from SGO/sgo/attributes/class.ttl rename to SGO/ogit/attributes/class.ttl diff --git a/SGO/sgo/attributes/classification.ttl b/SGO/ogit/attributes/classification.ttl similarity index 100% rename from SGO/sgo/attributes/classification.ttl rename to SGO/ogit/attributes/classification.ttl diff --git a/SGO/sgo/attributes/cleanContent.ttl b/SGO/ogit/attributes/cleanContent.ttl similarity index 100% rename from SGO/sgo/attributes/cleanContent.ttl rename to SGO/ogit/attributes/cleanContent.ttl diff --git a/SGO/sgo/attributes/closedAt.ttl b/SGO/ogit/attributes/closedAt.ttl similarity index 100% rename from SGO/sgo/attributes/closedAt.ttl rename to SGO/ogit/attributes/closedAt.ttl diff --git a/SGO/sgo/attributes/codeType.ttl b/SGO/ogit/attributes/codeType.ttl similarity index 100% rename from SGO/sgo/attributes/codeType.ttl rename to SGO/ogit/attributes/codeType.ttl diff --git a/SGO/sgo/attributes/color.ttl b/SGO/ogit/attributes/color.ttl similarity index 100% rename from SGO/sgo/attributes/color.ttl rename to SGO/ogit/attributes/color.ttl diff --git a/SGO/sgo/attributes/comment.ttl b/SGO/ogit/attributes/comment.ttl similarity index 100% rename from SGO/sgo/attributes/comment.ttl rename to SGO/ogit/attributes/comment.ttl diff --git a/SGO/sgo/attributes/condition.ttl b/SGO/ogit/attributes/condition.ttl similarity index 100% rename from SGO/sgo/attributes/condition.ttl rename to SGO/ogit/attributes/condition.ttl diff --git a/SGO/sgo/attributes/confidence.ttl b/SGO/ogit/attributes/confidence.ttl similarity index 100% rename from SGO/sgo/attributes/confidence.ttl rename to SGO/ogit/attributes/confidence.ttl diff --git a/SGO/sgo/attributes/confidentiality.ttl b/SGO/ogit/attributes/confidentiality.ttl similarity index 100% rename from SGO/sgo/attributes/confidentiality.ttl rename to SGO/ogit/attributes/confidentiality.ttl diff --git a/SGO/sgo/attributes/connectorId.ttl b/SGO/ogit/attributes/connectorId.ttl similarity index 100% rename from SGO/sgo/attributes/connectorId.ttl rename to SGO/ogit/attributes/connectorId.ttl diff --git a/SGO/sgo/attributes/consentLevel.ttl b/SGO/ogit/attributes/consentLevel.ttl similarity index 100% rename from SGO/sgo/attributes/consentLevel.ttl rename to SGO/ogit/attributes/consentLevel.ttl diff --git a/SGO/sgo/attributes/contact.ttl b/SGO/ogit/attributes/contact.ttl similarity index 100% rename from SGO/sgo/attributes/contact.ttl rename to SGO/ogit/attributes/contact.ttl diff --git a/SGO/sgo/attributes/content.ttl b/SGO/ogit/attributes/content.ttl similarity index 100% rename from SGO/sgo/attributes/content.ttl rename to SGO/ogit/attributes/content.ttl diff --git a/SGO/sgo/attributes/coordinate.ttl b/SGO/ogit/attributes/coordinate.ttl similarity index 100% rename from SGO/sgo/attributes/coordinate.ttl rename to SGO/ogit/attributes/coordinate.ttl diff --git a/SGO/sgo/attributes/country.ttl b/SGO/ogit/attributes/country.ttl similarity index 100% rename from SGO/sgo/attributes/country.ttl rename to SGO/ogit/attributes/country.ttl diff --git a/SGO/sgo/attributes/createdAt.ttl b/SGO/ogit/attributes/createdAt.ttl similarity index 100% rename from SGO/sgo/attributes/createdAt.ttl rename to SGO/ogit/attributes/createdAt.ttl diff --git a/SGO/sgo/attributes/createdBy.ttl b/SGO/ogit/attributes/createdBy.ttl similarity index 100% rename from SGO/sgo/attributes/createdBy.ttl rename to SGO/ogit/attributes/createdBy.ttl diff --git a/SGO/sgo/attributes/creationTime.ttl b/SGO/ogit/attributes/creationTime.ttl similarity index 100% rename from SGO/sgo/attributes/creationTime.ttl rename to SGO/ogit/attributes/creationTime.ttl diff --git a/SGO/sgo/attributes/creator.ttl b/SGO/ogit/attributes/creator.ttl similarity index 100% rename from SGO/sgo/attributes/creator.ttl rename to SGO/ogit/attributes/creator.ttl diff --git a/SGO/sgo/attributes/currency.ttl b/SGO/ogit/attributes/currency.ttl similarity index 100% rename from SGO/sgo/attributes/currency.ttl rename to SGO/ogit/attributes/currency.ttl diff --git a/SGO/sgo/attributes/dateOfBirth.ttl b/SGO/ogit/attributes/dateOfBirth.ttl similarity index 100% rename from SGO/sgo/attributes/dateOfBirth.ttl rename to SGO/ogit/attributes/dateOfBirth.ttl diff --git a/SGO/sgo/attributes/dateOfDeath.ttl b/SGO/ogit/attributes/dateOfDeath.ttl similarity index 100% rename from SGO/sgo/attributes/dateOfDeath.ttl rename to SGO/ogit/attributes/dateOfDeath.ttl diff --git a/SGO/sgo/attributes/dayOfWeek.ttl b/SGO/ogit/attributes/dayOfWeek.ttl similarity index 100% rename from SGO/sgo/attributes/dayOfWeek.ttl rename to SGO/ogit/attributes/dayOfWeek.ttl diff --git a/SGO/sgo/attributes/deadline.ttl b/SGO/ogit/attributes/deadline.ttl similarity index 100% rename from SGO/sgo/attributes/deadline.ttl rename to SGO/ogit/attributes/deadline.ttl diff --git a/SGO/sgo/attributes/deliveredAt.ttl b/SGO/ogit/attributes/deliveredAt.ttl similarity index 100% rename from SGO/sgo/attributes/deliveredAt.ttl rename to SGO/ogit/attributes/deliveredAt.ttl diff --git a/SGO/sgo/attributes/description.ttl b/SGO/ogit/attributes/description.ttl similarity index 100% rename from SGO/sgo/attributes/description.ttl rename to SGO/ogit/attributes/description.ttl diff --git a/SGO/sgo/attributes/duration.ttl b/SGO/ogit/attributes/duration.ttl similarity index 100% rename from SGO/sgo/attributes/duration.ttl rename to SGO/ogit/attributes/duration.ttl diff --git a/SGO/sgo/attributes/durationUnit.ttl b/SGO/ogit/attributes/durationUnit.ttl similarity index 100% rename from SGO/sgo/attributes/durationUnit.ttl rename to SGO/ogit/attributes/durationUnit.ttl diff --git a/SGO/sgo/attributes/effort.ttl b/SGO/ogit/attributes/effort.ttl similarity index 100% rename from SGO/sgo/attributes/effort.ttl rename to SGO/ogit/attributes/effort.ttl diff --git a/SGO/sgo/attributes/email.ttl b/SGO/ogit/attributes/email.ttl similarity index 100% rename from SGO/sgo/attributes/email.ttl rename to SGO/ogit/attributes/email.ttl diff --git a/SGO/sgo/attributes/endOfWarranty.ttl b/SGO/ogit/attributes/endOfWarranty.ttl similarity index 100% rename from SGO/sgo/attributes/endOfWarranty.ttl rename to SGO/ogit/attributes/endOfWarranty.ttl diff --git a/SGO/sgo/attributes/endedAt.ttl b/SGO/ogit/attributes/endedAt.ttl similarity index 100% rename from SGO/sgo/attributes/endedAt.ttl rename to SGO/ogit/attributes/endedAt.ttl diff --git a/SGO/sgo/attributes/enumValues.ttl b/SGO/ogit/attributes/enumValues.ttl similarity index 100% rename from SGO/sgo/attributes/enumValues.ttl rename to SGO/ogit/attributes/enumValues.ttl diff --git a/SGO/sgo/attributes/expirationDate.ttl b/SGO/ogit/attributes/expirationDate.ttl similarity index 100% rename from SGO/sgo/attributes/expirationDate.ttl rename to SGO/ogit/attributes/expirationDate.ttl diff --git a/SGO/sgo/attributes/expiresAt.ttl b/SGO/ogit/attributes/expiresAt.ttl similarity index 100% rename from SGO/sgo/attributes/expiresAt.ttl rename to SGO/ogit/attributes/expiresAt.ttl diff --git a/SGO/sgo/attributes/externalId.ttl b/SGO/ogit/attributes/externalId.ttl similarity index 100% rename from SGO/sgo/attributes/externalId.ttl rename to SGO/ogit/attributes/externalId.ttl diff --git a/SGO/sgo/attributes/faultCount.ttl b/SGO/ogit/attributes/faultCount.ttl similarity index 100% rename from SGO/sgo/attributes/faultCount.ttl rename to SGO/ogit/attributes/faultCount.ttl diff --git a/SGO/sgo/attributes/favorite.ttl b/SGO/ogit/attributes/favorite.ttl similarity index 100% rename from SGO/sgo/attributes/favorite.ttl rename to SGO/ogit/attributes/favorite.ttl diff --git a/SGO/sgo/attributes/fax.ttl b/SGO/ogit/attributes/fax.ttl similarity index 100% rename from SGO/sgo/attributes/fax.ttl rename to SGO/ogit/attributes/fax.ttl diff --git a/SGO/sgo/attributes/finishedAt.ttl b/SGO/ogit/attributes/finishedAt.ttl similarity index 100% rename from SGO/sgo/attributes/finishedAt.ttl rename to SGO/ogit/attributes/finishedAt.ttl diff --git a/SGO/sgo/attributes/firstName.ttl b/SGO/ogit/attributes/firstName.ttl similarity index 100% rename from SGO/sgo/attributes/firstName.ttl rename to SGO/ogit/attributes/firstName.ttl diff --git a/SGO/sgo/attributes/firstOccurredAt.ttl b/SGO/ogit/attributes/firstOccurredAt.ttl similarity index 100% rename from SGO/sgo/attributes/firstOccurredAt.ttl rename to SGO/ogit/attributes/firstOccurredAt.ttl diff --git a/SGO/sgo/attributes/followers.ttl b/SGO/ogit/attributes/followers.ttl similarity index 100% rename from SGO/sgo/attributes/followers.ttl rename to SGO/ogit/attributes/followers.ttl diff --git a/SGO/sgo/attributes/foundingDate.ttl b/SGO/ogit/attributes/foundingDate.ttl similarity index 100% rename from SGO/sgo/attributes/foundingDate.ttl rename to SGO/ogit/attributes/foundingDate.ttl diff --git a/SGO/sgo/attributes/frequency.ttl b/SGO/ogit/attributes/frequency.ttl similarity index 100% rename from SGO/sgo/attributes/frequency.ttl rename to SGO/ogit/attributes/frequency.ttl diff --git a/SGO/sgo/attributes/function.ttl b/SGO/ogit/attributes/function.ttl similarity index 100% rename from SGO/sgo/attributes/function.ttl rename to SGO/ogit/attributes/function.ttl diff --git a/SGO/sgo/attributes/gender.ttl b/SGO/ogit/attributes/gender.ttl similarity index 100% rename from SGO/sgo/attributes/gender.ttl rename to SGO/ogit/attributes/gender.ttl diff --git a/SGO/sgo/attributes/id.ttl b/SGO/ogit/attributes/id.ttl similarity index 100% rename from SGO/sgo/attributes/id.ttl rename to SGO/ogit/attributes/id.ttl diff --git a/SGO/sgo/attributes/identifierCode.ttl b/SGO/ogit/attributes/identifierCode.ttl similarity index 100% rename from SGO/sgo/attributes/identifierCode.ttl rename to SGO/ogit/attributes/identifierCode.ttl diff --git a/SGO/sgo/attributes/impact.ttl b/SGO/ogit/attributes/impact.ttl similarity index 100% rename from SGO/sgo/attributes/impact.ttl rename to SGO/ogit/attributes/impact.ttl diff --git a/SGO/sgo/attributes/information.ttl b/SGO/ogit/attributes/information.ttl similarity index 100% rename from SGO/sgo/attributes/information.ttl rename to SGO/ogit/attributes/information.ttl diff --git a/SGO/sgo/attributes/installStatus.ttl b/SGO/ogit/attributes/installStatus.ttl similarity index 100% rename from SGO/sgo/attributes/installStatus.ttl rename to SGO/ogit/attributes/installStatus.ttl diff --git a/SGO/sgo/attributes/installedAt.ttl b/SGO/ogit/attributes/installedAt.ttl similarity index 100% rename from SGO/sgo/attributes/installedAt.ttl rename to SGO/ogit/attributes/installedAt.ttl diff --git a/SGO/sgo/attributes/instance.ttl b/SGO/ogit/attributes/instance.ttl similarity index 100% rename from SGO/sgo/attributes/instance.ttl rename to SGO/ogit/attributes/instance.ttl diff --git a/SGO/sgo/attributes/integrity.ttl b/SGO/ogit/attributes/integrity.ttl similarity index 100% rename from SGO/sgo/attributes/integrity.ttl rename to SGO/ogit/attributes/integrity.ttl diff --git a/SGO/sgo/attributes/inventoryNumber.ttl b/SGO/ogit/attributes/inventoryNumber.ttl similarity index 100% rename from SGO/sgo/attributes/inventoryNumber.ttl rename to SGO/ogit/attributes/inventoryNumber.ttl diff --git a/SGO/sgo/attributes/invoiceNumber.ttl b/SGO/ogit/attributes/invoiceNumber.ttl similarity index 100% rename from SGO/sgo/attributes/invoiceNumber.ttl rename to SGO/ogit/attributes/invoiceNumber.ttl diff --git a/SGO/sgo/attributes/ipAddress.ttl b/SGO/ogit/attributes/ipAddress.ttl similarity index 100% rename from SGO/sgo/attributes/ipAddress.ttl rename to SGO/ogit/attributes/ipAddress.ttl diff --git a/SGO/sgo/attributes/isCritical.ttl b/SGO/ogit/attributes/isCritical.ttl similarity index 100% rename from SGO/sgo/attributes/isCritical.ttl rename to SGO/ogit/attributes/isCritical.ttl diff --git a/SGO/sgo/attributes/isInternal.ttl b/SGO/ogit/attributes/isInternal.ttl similarity index 100% rename from SGO/sgo/attributes/isInternal.ttl rename to SGO/ogit/attributes/isInternal.ttl diff --git a/SGO/sgo/attributes/isMutable.ttl b/SGO/ogit/attributes/isMutable.ttl similarity index 100% rename from SGO/sgo/attributes/isMutable.ttl rename to SGO/ogit/attributes/isMutable.ttl diff --git a/SGO/sgo/attributes/isPermanent.ttl b/SGO/ogit/attributes/isPermanent.ttl similarity index 100% rename from SGO/sgo/attributes/isPermanent.ttl rename to SGO/ogit/attributes/isPermanent.ttl diff --git a/SGO/sgo/attributes/isRoot.ttl b/SGO/ogit/attributes/isRoot.ttl similarity index 100% rename from SGO/sgo/attributes/isRoot.ttl rename to SGO/ogit/attributes/isRoot.ttl diff --git a/SGO/sgo/attributes/isSupported.ttl b/SGO/ogit/attributes/isSupported.ttl similarity index 100% rename from SGO/sgo/attributes/isSupported.ttl rename to SGO/ogit/attributes/isSupported.ttl diff --git a/SGO/sgo/attributes/isValid.ttl b/SGO/ogit/attributes/isValid.ttl similarity index 100% rename from SGO/sgo/attributes/isValid.ttl rename to SGO/ogit/attributes/isValid.ttl diff --git a/SGO/sgo/attributes/justification.ttl b/SGO/ogit/attributes/justification.ttl similarity index 100% rename from SGO/sgo/attributes/justification.ttl rename to SGO/ogit/attributes/justification.ttl diff --git a/SGO/sgo/attributes/language.ttl b/SGO/ogit/attributes/language.ttl similarity index 100% rename from SGO/sgo/attributes/language.ttl rename to SGO/ogit/attributes/language.ttl diff --git a/SGO/sgo/attributes/lastClearedAt.ttl b/SGO/ogit/attributes/lastClearedAt.ttl similarity index 100% rename from SGO/sgo/attributes/lastClearedAt.ttl rename to SGO/ogit/attributes/lastClearedAt.ttl diff --git a/SGO/sgo/attributes/lastName.ttl b/SGO/ogit/attributes/lastName.ttl similarity index 100% rename from SGO/sgo/attributes/lastName.ttl rename to SGO/ogit/attributes/lastName.ttl diff --git a/SGO/sgo/attributes/lastOccurredAt.ttl b/SGO/ogit/attributes/lastOccurredAt.ttl similarity index 100% rename from SGO/sgo/attributes/lastOccurredAt.ttl rename to SGO/ogit/attributes/lastOccurredAt.ttl diff --git a/SGO/sgo/attributes/lastScannedAt.ttl b/SGO/ogit/attributes/lastScannedAt.ttl similarity index 100% rename from SGO/sgo/attributes/lastScannedAt.ttl rename to SGO/ogit/attributes/lastScannedAt.ttl diff --git a/SGO/sgo/attributes/lastUpdatedAt.ttl b/SGO/ogit/attributes/lastUpdatedAt.ttl similarity index 100% rename from SGO/sgo/attributes/lastUpdatedAt.ttl rename to SGO/ogit/attributes/lastUpdatedAt.ttl diff --git a/SGO/sgo/attributes/lastUpdatedBy.ttl b/SGO/ogit/attributes/lastUpdatedBy.ttl similarity index 100% rename from SGO/sgo/attributes/lastUpdatedBy.ttl rename to SGO/ogit/attributes/lastUpdatedBy.ttl diff --git a/SGO/sgo/attributes/latestVersion.ttl b/SGO/ogit/attributes/latestVersion.ttl similarity index 100% rename from SGO/sgo/attributes/latestVersion.ttl rename to SGO/ogit/attributes/latestVersion.ttl diff --git a/SGO/sgo/attributes/latitude.ttl b/SGO/ogit/attributes/latitude.ttl similarity index 100% rename from SGO/sgo/attributes/latitude.ttl rename to SGO/ogit/attributes/latitude.ttl diff --git a/SGO/sgo/attributes/leaseContract.ttl b/SGO/ogit/attributes/leaseContract.ttl similarity index 100% rename from SGO/sgo/attributes/leaseContract.ttl rename to SGO/ogit/attributes/leaseContract.ttl diff --git a/SGO/sgo/attributes/lengthOfReportingPeriod.ttl b/SGO/ogit/attributes/lengthOfReportingPeriod.ttl similarity index 100% rename from SGO/sgo/attributes/lengthOfReportingPeriod.ttl rename to SGO/ogit/attributes/lengthOfReportingPeriod.ttl diff --git a/SGO/sgo/attributes/licenseId.ttl b/SGO/ogit/attributes/licenseId.ttl similarity index 100% rename from SGO/sgo/attributes/licenseId.ttl rename to SGO/ogit/attributes/licenseId.ttl diff --git a/SGO/sgo/attributes/licenseKey.ttl b/SGO/ogit/attributes/licenseKey.ttl similarity index 100% rename from SGO/sgo/attributes/licenseKey.ttl rename to SGO/ogit/attributes/licenseKey.ttl diff --git a/SGO/sgo/attributes/licenseRequestStatus.ttl b/SGO/ogit/attributes/licenseRequestStatus.ttl similarity index 100% rename from SGO/sgo/attributes/licenseRequestStatus.ttl rename to SGO/ogit/attributes/licenseRequestStatus.ttl diff --git a/SGO/sgo/attributes/licenseSubject.ttl b/SGO/ogit/attributes/licenseSubject.ttl similarity index 100% rename from SGO/sgo/attributes/licenseSubject.ttl rename to SGO/ogit/attributes/licenseSubject.ttl diff --git a/SGO/sgo/attributes/licenseType.ttl b/SGO/ogit/attributes/licenseType.ttl similarity index 100% rename from SGO/sgo/attributes/licenseType.ttl rename to SGO/ogit/attributes/licenseType.ttl diff --git a/SGO/sgo/attributes/locationAcquisitionTime.ttl b/SGO/ogit/attributes/locationAcquisitionTime.ttl similarity index 100% rename from SGO/sgo/attributes/locationAcquisitionTime.ttl rename to SGO/ogit/attributes/locationAcquisitionTime.ttl diff --git a/SGO/sgo/attributes/locationPrecision.ttl b/SGO/ogit/attributes/locationPrecision.ttl similarity index 100% rename from SGO/sgo/attributes/locationPrecision.ttl rename to SGO/ogit/attributes/locationPrecision.ttl diff --git a/SGO/sgo/attributes/locked.ttl b/SGO/ogit/attributes/locked.ttl similarity index 100% rename from SGO/sgo/attributes/locked.ttl rename to SGO/ogit/attributes/locked.ttl diff --git a/SGO/sgo/attributes/longitude.ttl b/SGO/ogit/attributes/longitude.ttl similarity index 100% rename from SGO/sgo/attributes/longitude.ttl rename to SGO/ogit/attributes/longitude.ttl diff --git a/SGO/sgo/attributes/lowerLimit.ttl b/SGO/ogit/attributes/lowerLimit.ttl similarity index 100% rename from SGO/sgo/attributes/lowerLimit.ttl rename to SGO/ogit/attributes/lowerLimit.ttl diff --git a/SGO/sgo/attributes/macAddress.ttl b/SGO/ogit/attributes/macAddress.ttl similarity index 100% rename from SGO/sgo/attributes/macAddress.ttl rename to SGO/ogit/attributes/macAddress.ttl diff --git a/SGO/sgo/attributes/maintenanceState.ttl b/SGO/ogit/attributes/maintenanceState.ttl similarity index 100% rename from SGO/sgo/attributes/maintenanceState.ttl rename to SGO/ogit/attributes/maintenanceState.ttl diff --git a/SGO/sgo/attributes/manufacturer.ttl b/SGO/ogit/attributes/manufacturer.ttl similarity index 100% rename from SGO/sgo/attributes/manufacturer.ttl rename to SGO/ogit/attributes/manufacturer.ttl diff --git a/SGO/sgo/attributes/market.ttl b/SGO/ogit/attributes/market.ttl similarity index 100% rename from SGO/sgo/attributes/market.ttl rename to SGO/ogit/attributes/market.ttl diff --git a/SGO/sgo/attributes/message.ttl b/SGO/ogit/attributes/message.ttl similarity index 100% rename from SGO/sgo/attributes/message.ttl rename to SGO/ogit/attributes/message.ttl diff --git a/SGO/sgo/attributes/middleName.ttl b/SGO/ogit/attributes/middleName.ttl similarity index 100% rename from SGO/sgo/attributes/middleName.ttl rename to SGO/ogit/attributes/middleName.ttl diff --git a/SGO/sgo/attributes/mimeType.ttl b/SGO/ogit/attributes/mimeType.ttl similarity index 100% rename from SGO/sgo/attributes/mimeType.ttl rename to SGO/ogit/attributes/mimeType.ttl diff --git a/SGO/sgo/attributes/mobilePhone.ttl b/SGO/ogit/attributes/mobilePhone.ttl similarity index 100% rename from SGO/sgo/attributes/mobilePhone.ttl rename to SGO/ogit/attributes/mobilePhone.ttl diff --git a/SGO/sgo/attributes/mode.ttl b/SGO/ogit/attributes/mode.ttl similarity index 100% rename from SGO/sgo/attributes/mode.ttl rename to SGO/ogit/attributes/mode.ttl diff --git a/SGO/sgo/attributes/model.ttl b/SGO/ogit/attributes/model.ttl similarity index 100% rename from SGO/sgo/attributes/model.ttl rename to SGO/ogit/attributes/model.ttl diff --git a/SGO/sgo/attributes/modelNumber.ttl b/SGO/ogit/attributes/modelNumber.ttl similarity index 100% rename from SGO/sgo/attributes/modelNumber.ttl rename to SGO/ogit/attributes/modelNumber.ttl diff --git a/SGO/sgo/attributes/modificationTime.ttl b/SGO/ogit/attributes/modificationTime.ttl similarity index 100% rename from SGO/sgo/attributes/modificationTime.ttl rename to SGO/ogit/attributes/modificationTime.ttl diff --git a/SGO/sgo/attributes/name.ttl b/SGO/ogit/attributes/name.ttl similarity index 100% rename from SGO/sgo/attributes/name.ttl rename to SGO/ogit/attributes/name.ttl diff --git a/SGO/sgo/attributes/negativeScore.ttl b/SGO/ogit/attributes/negativeScore.ttl similarity index 100% rename from SGO/sgo/attributes/negativeScore.ttl rename to SGO/ogit/attributes/negativeScore.ttl diff --git a/SGO/sgo/attributes/notification.ttl b/SGO/ogit/attributes/notification.ttl similarity index 100% rename from SGO/sgo/attributes/notification.ttl rename to SGO/ogit/attributes/notification.ttl diff --git a/SGO/sgo/attributes/numberOfChildren.ttl b/SGO/ogit/attributes/numberOfChildren.ttl similarity index 100% rename from SGO/sgo/attributes/numberOfChildren.ttl rename to SGO/ogit/attributes/numberOfChildren.ttl diff --git a/SGO/sgo/attributes/occurenceCount.ttl b/SGO/ogit/attributes/occurenceCount.ttl similarity index 100% rename from SGO/sgo/attributes/occurenceCount.ttl rename to SGO/ogit/attributes/occurenceCount.ttl diff --git a/SGO/sgo/attributes/officePhone.ttl b/SGO/ogit/attributes/officePhone.ttl similarity index 100% rename from SGO/sgo/attributes/officePhone.ttl rename to SGO/ogit/attributes/officePhone.ttl diff --git a/SGO/sgo/attributes/onAttribute.ttl b/SGO/ogit/attributes/onAttribute.ttl similarity index 100% rename from SGO/sgo/attributes/onAttribute.ttl rename to SGO/ogit/attributes/onAttribute.ttl diff --git a/SGO/sgo/attributes/onVertex.ttl b/SGO/ogit/attributes/onVertex.ttl similarity index 100% rename from SGO/sgo/attributes/onVertex.ttl rename to SGO/ogit/attributes/onVertex.ttl diff --git a/SGO/sgo/attributes/openedAt.ttl b/SGO/ogit/attributes/openedAt.ttl similarity index 100% rename from SGO/sgo/attributes/openedAt.ttl rename to SGO/ogit/attributes/openedAt.ttl diff --git a/SGO/sgo/attributes/operation.ttl b/SGO/ogit/attributes/operation.ttl similarity index 100% rename from SGO/sgo/attributes/operation.ttl rename to SGO/ogit/attributes/operation.ttl diff --git a/SGO/sgo/attributes/operationalStatus.ttl b/SGO/ogit/attributes/operationalStatus.ttl similarity index 100% rename from SGO/sgo/attributes/operationalStatus.ttl rename to SGO/ogit/attributes/operationalStatus.ttl diff --git a/SGO/sgo/attributes/orderedAt.ttl b/SGO/ogit/attributes/orderedAt.ttl similarity index 100% rename from SGO/sgo/attributes/orderedAt.ttl rename to SGO/ogit/attributes/orderedAt.ttl diff --git a/SGO/sgo/attributes/otherPhone.ttl b/SGO/ogit/attributes/otherPhone.ttl similarity index 100% rename from SGO/sgo/attributes/otherPhone.ttl rename to SGO/ogit/attributes/otherPhone.ttl diff --git a/SGO/sgo/attributes/parentId.ttl b/SGO/ogit/attributes/parentId.ttl similarity index 100% rename from SGO/sgo/attributes/parentId.ttl rename to SGO/ogit/attributes/parentId.ttl diff --git a/SGO/sgo/attributes/passportNumber.ttl b/SGO/ogit/attributes/passportNumber.ttl similarity index 100% rename from SGO/sgo/attributes/passportNumber.ttl rename to SGO/ogit/attributes/passportNumber.ttl diff --git a/SGO/sgo/attributes/pendingChange.ttl b/SGO/ogit/attributes/pendingChange.ttl similarity index 100% rename from SGO/sgo/attributes/pendingChange.ttl rename to SGO/ogit/attributes/pendingChange.ttl diff --git a/SGO/sgo/attributes/phone.ttl b/SGO/ogit/attributes/phone.ttl similarity index 100% rename from SGO/sgo/attributes/phone.ttl rename to SGO/ogit/attributes/phone.ttl diff --git a/SGO/sgo/attributes/placement.ttl b/SGO/ogit/attributes/placement.ttl similarity index 100% rename from SGO/sgo/attributes/placement.ttl rename to SGO/ogit/attributes/placement.ttl diff --git a/SGO/sgo/attributes/plannedFinishDate.ttl b/SGO/ogit/attributes/plannedFinishDate.ttl similarity index 100% rename from SGO/sgo/attributes/plannedFinishDate.ttl rename to SGO/ogit/attributes/plannedFinishDate.ttl diff --git a/SGO/sgo/attributes/plannedStartDate.ttl b/SGO/ogit/attributes/plannedStartDate.ttl similarity index 100% rename from SGO/sgo/attributes/plannedStartDate.ttl rename to SGO/ogit/attributes/plannedStartDate.ttl diff --git a/SGO/sgo/attributes/polarity.ttl b/SGO/ogit/attributes/polarity.ttl similarity index 100% rename from SGO/sgo/attributes/polarity.ttl rename to SGO/ogit/attributes/polarity.ttl diff --git a/SGO/sgo/attributes/position.ttl b/SGO/ogit/attributes/position.ttl similarity index 100% rename from SGO/sgo/attributes/position.ttl rename to SGO/ogit/attributes/position.ttl diff --git a/SGO/sgo/attributes/positionNumber.ttl b/SGO/ogit/attributes/positionNumber.ttl similarity index 100% rename from SGO/sgo/attributes/positionNumber.ttl rename to SGO/ogit/attributes/positionNumber.ttl diff --git a/SGO/sgo/attributes/positiveScore.ttl b/SGO/ogit/attributes/positiveScore.ttl similarity index 100% rename from SGO/sgo/attributes/positiveScore.ttl rename to SGO/ogit/attributes/positiveScore.ttl diff --git a/SGO/sgo/attributes/postalCode.ttl b/SGO/ogit/attributes/postalCode.ttl similarity index 100% rename from SGO/sgo/attributes/postalCode.ttl rename to SGO/ogit/attributes/postalCode.ttl diff --git a/SGO/sgo/attributes/powerConsumption.ttl b/SGO/ogit/attributes/powerConsumption.ttl similarity index 100% rename from SGO/sgo/attributes/powerConsumption.ttl rename to SGO/ogit/attributes/powerConsumption.ttl diff --git a/SGO/sgo/attributes/priority.ttl b/SGO/ogit/attributes/priority.ttl similarity index 100% rename from SGO/sgo/attributes/priority.ttl rename to SGO/ogit/attributes/priority.ttl diff --git a/SGO/sgo/attributes/productOrderNumber.ttl b/SGO/ogit/attributes/productOrderNumber.ttl similarity index 100% rename from SGO/sgo/attributes/productOrderNumber.ttl rename to SGO/ogit/attributes/productOrderNumber.ttl diff --git a/SGO/sgo/attributes/profession.ttl b/SGO/ogit/attributes/profession.ttl similarity index 100% rename from SGO/sgo/attributes/profession.ttl rename to SGO/ogit/attributes/profession.ttl diff --git a/SGO/sgo/attributes/project.ttl b/SGO/ogit/attributes/project.ttl similarity index 100% rename from SGO/sgo/attributes/project.ttl rename to SGO/ogit/attributes/project.ttl diff --git a/SGO/sgo/attributes/public.ttl b/SGO/ogit/attributes/public.ttl similarity index 100% rename from SGO/sgo/attributes/public.ttl rename to SGO/ogit/attributes/public.ttl diff --git a/SGO/sgo/attributes/publishedAt.ttl b/SGO/ogit/attributes/publishedAt.ttl similarity index 100% rename from SGO/sgo/attributes/publishedAt.ttl rename to SGO/ogit/attributes/publishedAt.ttl diff --git a/SGO/sgo/attributes/purchaseDate.ttl b/SGO/ogit/attributes/purchaseDate.ttl similarity index 100% rename from SGO/sgo/attributes/purchaseDate.ttl rename to SGO/ogit/attributes/purchaseDate.ttl diff --git a/SGO/sgo/attributes/purchasedAt.ttl b/SGO/ogit/attributes/purchasedAt.ttl similarity index 100% rename from SGO/sgo/attributes/purchasedAt.ttl rename to SGO/ogit/attributes/purchasedAt.ttl diff --git a/SGO/sgo/attributes/question.ttl b/SGO/ogit/attributes/question.ttl similarity index 100% rename from SGO/sgo/attributes/question.ttl rename to SGO/ogit/attributes/question.ttl diff --git a/SGO/sgo/attributes/range.ttl b/SGO/ogit/attributes/range.ttl similarity index 100% rename from SGO/sgo/attributes/range.ttl rename to SGO/ogit/attributes/range.ttl diff --git a/SGO/sgo/attributes/rank.ttl b/SGO/ogit/attributes/rank.ttl similarity index 100% rename from SGO/sgo/attributes/rank.ttl rename to SGO/ogit/attributes/rank.ttl diff --git a/SGO/sgo/attributes/reason.ttl b/SGO/ogit/attributes/reason.ttl similarity index 100% rename from SGO/sgo/attributes/reason.ttl rename to SGO/ogit/attributes/reason.ttl diff --git a/SGO/sgo/attributes/recipients.ttl b/SGO/ogit/attributes/recipients.ttl similarity index 100% rename from SGO/sgo/attributes/recipients.ttl rename to SGO/ogit/attributes/recipients.ttl diff --git a/SGO/sgo/attributes/religion.ttl b/SGO/ogit/attributes/religion.ttl similarity index 100% rename from SGO/sgo/attributes/religion.ttl rename to SGO/ogit/attributes/religion.ttl diff --git a/SGO/sgo/attributes/reportedAt.ttl b/SGO/ogit/attributes/reportedAt.ttl similarity index 100% rename from SGO/sgo/attributes/reportedAt.ttl rename to SGO/ogit/attributes/reportedAt.ttl diff --git a/SGO/sgo/attributes/reportedBy.ttl b/SGO/ogit/attributes/reportedBy.ttl similarity index 100% rename from SGO/sgo/attributes/reportedBy.ttl rename to SGO/ogit/attributes/reportedBy.ttl diff --git a/SGO/sgo/attributes/resource.ttl b/SGO/ogit/attributes/resource.ttl similarity index 100% rename from SGO/sgo/attributes/resource.ttl rename to SGO/ogit/attributes/resource.ttl diff --git a/SGO/sgo/attributes/response.ttl b/SGO/ogit/attributes/response.ttl similarity index 100% rename from SGO/sgo/attributes/response.ttl rename to SGO/ogit/attributes/response.ttl diff --git a/SGO/sgo/attributes/reviewedAt.ttl b/SGO/ogit/attributes/reviewedAt.ttl similarity index 100% rename from SGO/sgo/attributes/reviewedAt.ttl rename to SGO/ogit/attributes/reviewedAt.ttl diff --git a/SGO/sgo/attributes/reviewedBy.ttl b/SGO/ogit/attributes/reviewedBy.ttl similarity index 100% rename from SGO/sgo/attributes/reviewedBy.ttl rename to SGO/ogit/attributes/reviewedBy.ttl diff --git a/SGO/sgo/attributes/revision.ttl b/SGO/ogit/attributes/revision.ttl similarity index 100% rename from SGO/sgo/attributes/revision.ttl rename to SGO/ogit/attributes/revision.ttl diff --git a/SGO/sgo/attributes/revokedAt.ttl b/SGO/ogit/attributes/revokedAt.ttl similarity index 100% rename from SGO/sgo/attributes/revokedAt.ttl rename to SGO/ogit/attributes/revokedAt.ttl diff --git a/SGO/sgo/attributes/risk.ttl b/SGO/ogit/attributes/risk.ttl similarity index 100% rename from SGO/sgo/attributes/risk.ttl rename to SGO/ogit/attributes/risk.ttl diff --git a/SGO/sgo/attributes/schedule.ttl b/SGO/ogit/attributes/schedule.ttl similarity index 100% rename from SGO/sgo/attributes/schedule.ttl rename to SGO/ogit/attributes/schedule.ttl diff --git a/SGO/sgo/attributes/section.ttl b/SGO/ogit/attributes/section.ttl similarity index 100% rename from SGO/sgo/attributes/section.ttl rename to SGO/ogit/attributes/section.ttl diff --git a/SGO/sgo/attributes/securityClass.ttl b/SGO/ogit/attributes/securityClass.ttl similarity index 100% rename from SGO/sgo/attributes/securityClass.ttl rename to SGO/ogit/attributes/securityClass.ttl diff --git a/SGO/sgo/attributes/serialNumber.ttl b/SGO/ogit/attributes/serialNumber.ttl similarity index 100% rename from SGO/sgo/attributes/serialNumber.ttl rename to SGO/ogit/attributes/serialNumber.ttl diff --git a/SGO/sgo/attributes/serviceContract.ttl b/SGO/ogit/attributes/serviceContract.ttl similarity index 100% rename from SGO/sgo/attributes/serviceContract.ttl rename to SGO/ogit/attributes/serviceContract.ttl diff --git a/SGO/sgo/attributes/severity.ttl b/SGO/ogit/attributes/severity.ttl similarity index 100% rename from SGO/sgo/attributes/severity.ttl rename to SGO/ogit/attributes/severity.ttl diff --git a/SGO/sgo/attributes/sharedWith.ttl b/SGO/ogit/attributes/sharedWith.ttl similarity index 100% rename from SGO/sgo/attributes/sharedWith.ttl rename to SGO/ogit/attributes/sharedWith.ttl diff --git a/SGO/sgo/attributes/shortDescription.ttl b/SGO/ogit/attributes/shortDescription.ttl similarity index 100% rename from SGO/sgo/attributes/shortDescription.ttl rename to SGO/ogit/attributes/shortDescription.ttl diff --git a/SGO/sgo/attributes/size.ttl b/SGO/ogit/attributes/size.ttl similarity index 100% rename from SGO/sgo/attributes/size.ttl rename to SGO/ogit/attributes/size.ttl diff --git a/SGO/sgo/attributes/source.ttl b/SGO/ogit/attributes/source.ttl similarity index 100% rename from SGO/sgo/attributes/source.ttl rename to SGO/ogit/attributes/source.ttl diff --git a/SGO/sgo/attributes/sourceId.ttl b/SGO/ogit/attributes/sourceId.ttl similarity index 100% rename from SGO/sgo/attributes/sourceId.ttl rename to SGO/ogit/attributes/sourceId.ttl diff --git a/SGO/sgo/attributes/sourceTable.ttl b/SGO/ogit/attributes/sourceTable.ttl similarity index 100% rename from SGO/sgo/attributes/sourceTable.ttl rename to SGO/ogit/attributes/sourceTable.ttl diff --git a/SGO/sgo/attributes/soxClass.ttl b/SGO/ogit/attributes/soxClass.ttl similarity index 100% rename from SGO/sgo/attributes/soxClass.ttl rename to SGO/ogit/attributes/soxClass.ttl diff --git a/SGO/sgo/attributes/startOfWarranty.ttl b/SGO/ogit/attributes/startOfWarranty.ttl similarity index 100% rename from SGO/sgo/attributes/startOfWarranty.ttl rename to SGO/ogit/attributes/startOfWarranty.ttl diff --git a/SGO/sgo/attributes/startedAt.ttl b/SGO/ogit/attributes/startedAt.ttl similarity index 100% rename from SGO/sgo/attributes/startedAt.ttl rename to SGO/ogit/attributes/startedAt.ttl diff --git a/SGO/sgo/attributes/status.ttl b/SGO/ogit/attributes/status.ttl similarity index 100% rename from SGO/sgo/attributes/status.ttl rename to SGO/ogit/attributes/status.ttl diff --git a/SGO/sgo/attributes/streetAddress.ttl b/SGO/ogit/attributes/streetAddress.ttl similarity index 100% rename from SGO/sgo/attributes/streetAddress.ttl rename to SGO/ogit/attributes/streetAddress.ttl diff --git a/SGO/sgo/attributes/subCategory.ttl b/SGO/ogit/attributes/subCategory.ttl similarity index 100% rename from SGO/sgo/attributes/subCategory.ttl rename to SGO/ogit/attributes/subCategory.ttl diff --git a/SGO/sgo/attributes/subType.ttl b/SGO/ogit/attributes/subType.ttl similarity index 100% rename from SGO/sgo/attributes/subType.ttl rename to SGO/ogit/attributes/subType.ttl diff --git a/SGO/sgo/attributes/subject.ttl b/SGO/ogit/attributes/subject.ttl similarity index 100% rename from SGO/sgo/attributes/subject.ttl rename to SGO/ogit/attributes/subject.ttl diff --git a/SGO/sgo/attributes/summary.ttl b/SGO/ogit/attributes/summary.ttl similarity index 100% rename from SGO/sgo/attributes/summary.ttl rename to SGO/ogit/attributes/summary.ttl diff --git a/SGO/sgo/attributes/synonyms.ttl b/SGO/ogit/attributes/synonyms.ttl similarity index 100% rename from SGO/sgo/attributes/synonyms.ttl rename to SGO/ogit/attributes/synonyms.ttl diff --git a/SGO/sgo/attributes/tags.ttl b/SGO/ogit/attributes/tags.ttl similarity index 100% rename from SGO/sgo/attributes/tags.ttl rename to SGO/ogit/attributes/tags.ttl diff --git a/SGO/sgo/attributes/taskLog.ttl b/SGO/ogit/attributes/taskLog.ttl similarity index 100% rename from SGO/sgo/attributes/taskLog.ttl rename to SGO/ogit/attributes/taskLog.ttl diff --git a/SGO/sgo/attributes/tenantId.ttl b/SGO/ogit/attributes/tenantId.ttl similarity index 100% rename from SGO/sgo/attributes/tenantId.ttl rename to SGO/ogit/attributes/tenantId.ttl diff --git a/SGO/sgo/attributes/timeZone.ttl b/SGO/ogit/attributes/timeZone.ttl similarity index 100% rename from SGO/sgo/attributes/timeZone.ttl rename to SGO/ogit/attributes/timeZone.ttl diff --git a/SGO/sgo/attributes/timestamp.ttl b/SGO/ogit/attributes/timestamp.ttl similarity index 100% rename from SGO/sgo/attributes/timestamp.ttl rename to SGO/ogit/attributes/timestamp.ttl diff --git a/SGO/sgo/attributes/title.ttl b/SGO/ogit/attributes/title.ttl similarity index 100% rename from SGO/sgo/attributes/title.ttl rename to SGO/ogit/attributes/title.ttl diff --git a/SGO/sgo/attributes/token.ttl b/SGO/ogit/attributes/token.ttl similarity index 100% rename from SGO/sgo/attributes/token.ttl rename to SGO/ogit/attributes/token.ttl diff --git a/SGO/sgo/attributes/tone.ttl b/SGO/ogit/attributes/tone.ttl similarity index 100% rename from SGO/sgo/attributes/tone.ttl rename to SGO/ogit/attributes/tone.ttl diff --git a/SGO/sgo/attributes/type.ttl b/SGO/ogit/attributes/type.ttl similarity index 100% rename from SGO/sgo/attributes/type.ttl rename to SGO/ogit/attributes/type.ttl diff --git a/SGO/sgo/attributes/unit.ttl b/SGO/ogit/attributes/unit.ttl similarity index 100% rename from SGO/sgo/attributes/unit.ttl rename to SGO/ogit/attributes/unit.ttl diff --git a/SGO/sgo/attributes/unitDescription.ttl b/SGO/ogit/attributes/unitDescription.ttl similarity index 100% rename from SGO/sgo/attributes/unitDescription.ttl rename to SGO/ogit/attributes/unitDescription.ttl diff --git a/SGO/sgo/attributes/updateCount.ttl b/SGO/ogit/attributes/updateCount.ttl similarity index 100% rename from SGO/sgo/attributes/updateCount.ttl rename to SGO/ogit/attributes/updateCount.ttl diff --git a/SGO/sgo/attributes/upperLimit.ttl b/SGO/ogit/attributes/upperLimit.ttl similarity index 100% rename from SGO/sgo/attributes/upperLimit.ttl rename to SGO/ogit/attributes/upperLimit.ttl diff --git a/SGO/sgo/attributes/urgency.ttl b/SGO/ogit/attributes/urgency.ttl similarity index 100% rename from SGO/sgo/attributes/urgency.ttl rename to SGO/ogit/attributes/urgency.ttl diff --git a/SGO/sgo/attributes/uri.ttl b/SGO/ogit/attributes/uri.ttl similarity index 100% rename from SGO/sgo/attributes/uri.ttl rename to SGO/ogit/attributes/uri.ttl diff --git a/SGO/sgo/attributes/url.ttl b/SGO/ogit/attributes/url.ttl similarity index 100% rename from SGO/sgo/attributes/url.ttl rename to SGO/ogit/attributes/url.ttl diff --git a/SGO/sgo/attributes/validFrom.ttl b/SGO/ogit/attributes/validFrom.ttl similarity index 100% rename from SGO/sgo/attributes/validFrom.ttl rename to SGO/ogit/attributes/validFrom.ttl diff --git a/SGO/sgo/attributes/validTo.ttl b/SGO/ogit/attributes/validTo.ttl similarity index 100% rename from SGO/sgo/attributes/validTo.ttl rename to SGO/ogit/attributes/validTo.ttl diff --git a/SGO/sgo/attributes/value.ttl b/SGO/ogit/attributes/value.ttl similarity index 100% rename from SGO/sgo/attributes/value.ttl rename to SGO/ogit/attributes/value.ttl diff --git a/SGO/sgo/attributes/valueDate.ttl b/SGO/ogit/attributes/valueDate.ttl similarity index 100% rename from SGO/sgo/attributes/valueDate.ttl rename to SGO/ogit/attributes/valueDate.ttl diff --git a/SGO/sgo/attributes/values.ttl b/SGO/ogit/attributes/values.ttl similarity index 100% rename from SGO/sgo/attributes/values.ttl rename to SGO/ogit/attributes/values.ttl diff --git a/SGO/sgo/attributes/vendor.ttl b/SGO/ogit/attributes/vendor.ttl similarity index 100% rename from SGO/sgo/attributes/vendor.ttl rename to SGO/ogit/attributes/vendor.ttl diff --git a/SGO/sgo/attributes/version.ttl b/SGO/ogit/attributes/version.ttl similarity index 100% rename from SGO/sgo/attributes/version.ttl rename to SGO/ogit/attributes/version.ttl diff --git a/SGO/sgo/attributes/webPage.ttl b/SGO/ogit/attributes/webPage.ttl similarity index 100% rename from SGO/sgo/attributes/webPage.ttl rename to SGO/ogit/attributes/webPage.ttl diff --git a/SGO/sgo/attributes/weight.ttl b/SGO/ogit/attributes/weight.ttl similarity index 100% rename from SGO/sgo/attributes/weight.ttl rename to SGO/ogit/attributes/weight.ttl diff --git a/SGO/sgo/attributes/yearOfBirth.ttl b/SGO/ogit/attributes/yearOfBirth.ttl similarity index 100% rename from SGO/sgo/attributes/yearOfBirth.ttl rename to SGO/ogit/attributes/yearOfBirth.ttl diff --git a/SGO/sgo/attributes/zipCode.ttl b/SGO/ogit/attributes/zipCode.ttl similarity index 100% rename from SGO/sgo/attributes/zipCode.ttl rename to SGO/ogit/attributes/zipCode.ttl diff --git a/SGO/core/attributes/_c-id.ttl b/SGO/ogit/core/attributes/_c-id.ttl similarity index 100% rename from SGO/core/attributes/_c-id.ttl rename to SGO/ogit/core/attributes/_c-id.ttl diff --git a/SGO/core/attributes/_content.ttl b/SGO/ogit/core/attributes/_content.ttl similarity index 100% rename from SGO/core/attributes/_content.ttl rename to SGO/ogit/core/attributes/_content.ttl diff --git a/SGO/core/attributes/_created-on.ttl b/SGO/ogit/core/attributes/_created-on.ttl similarity index 100% rename from SGO/core/attributes/_created-on.ttl rename to SGO/ogit/core/attributes/_created-on.ttl diff --git a/SGO/core/attributes/_creator-app.ttl b/SGO/ogit/core/attributes/_creator-app.ttl similarity index 100% rename from SGO/core/attributes/_creator-app.ttl rename to SGO/ogit/core/attributes/_creator-app.ttl diff --git a/SGO/core/attributes/_creator.ttl b/SGO/ogit/core/attributes/_creator.ttl similarity index 100% rename from SGO/core/attributes/_creator.ttl rename to SGO/ogit/core/attributes/_creator.ttl diff --git a/SGO/core/attributes/_deleted-by-app.ttl b/SGO/ogit/core/attributes/_deleted-by-app.ttl similarity index 100% rename from SGO/core/attributes/_deleted-by-app.ttl rename to SGO/ogit/core/attributes/_deleted-by-app.ttl diff --git a/SGO/core/attributes/_deleted-by.ttl b/SGO/ogit/core/attributes/_deleted-by.ttl similarity index 100% rename from SGO/core/attributes/_deleted-by.ttl rename to SGO/ogit/core/attributes/_deleted-by.ttl diff --git a/SGO/core/attributes/_deleted-on.ttl b/SGO/ogit/core/attributes/_deleted-on.ttl similarity index 100% rename from SGO/core/attributes/_deleted-on.ttl rename to SGO/ogit/core/attributes/_deleted-on.ttl diff --git a/SGO/core/attributes/_edge-id.ttl b/SGO/ogit/core/attributes/_edge-id.ttl similarity index 100% rename from SGO/core/attributes/_edge-id.ttl rename to SGO/ogit/core/attributes/_edge-id.ttl diff --git a/SGO/core/attributes/_graphtype.ttl b/SGO/ogit/core/attributes/_graphtype.ttl similarity index 100% rename from SGO/core/attributes/_graphtype.ttl rename to SGO/ogit/core/attributes/_graphtype.ttl diff --git a/SGO/core/attributes/_id.ttl b/SGO/ogit/core/attributes/_id.ttl similarity index 100% rename from SGO/core/attributes/_id.ttl rename to SGO/ogit/core/attributes/_id.ttl diff --git a/SGO/core/attributes/_is-deleted.ttl b/SGO/ogit/core/attributes/_is-deleted.ttl similarity index 100% rename from SGO/core/attributes/_is-deleted.ttl rename to SGO/ogit/core/attributes/_is-deleted.ttl diff --git a/SGO/core/attributes/_modified-by-app.ttl b/SGO/ogit/core/attributes/_modified-by-app.ttl similarity index 100% rename from SGO/core/attributes/_modified-by-app.ttl rename to SGO/ogit/core/attributes/_modified-by-app.ttl diff --git a/SGO/core/attributes/_modified-by.ttl b/SGO/ogit/core/attributes/_modified-by.ttl similarity index 100% rename from SGO/core/attributes/_modified-by.ttl rename to SGO/ogit/core/attributes/_modified-by.ttl diff --git a/SGO/core/attributes/_modified-on.ttl b/SGO/ogit/core/attributes/_modified-on.ttl similarity index 100% rename from SGO/core/attributes/_modified-on.ttl rename to SGO/ogit/core/attributes/_modified-on.ttl diff --git a/SGO/core/attributes/_organization.ttl b/SGO/ogit/core/attributes/_organization.ttl similarity index 100% rename from SGO/core/attributes/_organization.ttl rename to SGO/ogit/core/attributes/_organization.ttl diff --git a/SGO/core/attributes/_owner.ttl b/SGO/ogit/core/attributes/_owner.ttl similarity index 100% rename from SGO/core/attributes/_owner.ttl rename to SGO/ogit/core/attributes/_owner.ttl diff --git a/SGO/core/attributes/_reader.ttl b/SGO/ogit/core/attributes/_reader.ttl similarity index 100% rename from SGO/core/attributes/_reader.ttl rename to SGO/ogit/core/attributes/_reader.ttl diff --git a/SGO/core/attributes/_scope.ttl b/SGO/ogit/core/attributes/_scope.ttl similarity index 100% rename from SGO/core/attributes/_scope.ttl rename to SGO/ogit/core/attributes/_scope.ttl diff --git a/SGO/core/attributes/_source.ttl b/SGO/ogit/core/attributes/_source.ttl similarity index 100% rename from SGO/core/attributes/_source.ttl rename to SGO/ogit/core/attributes/_source.ttl diff --git a/SGO/core/attributes/_tags.ttl b/SGO/ogit/core/attributes/_tags.ttl similarity index 100% rename from SGO/core/attributes/_tags.ttl rename to SGO/ogit/core/attributes/_tags.ttl diff --git a/SGO/core/attributes/_type.ttl b/SGO/ogit/core/attributes/_type.ttl similarity index 100% rename from SGO/core/attributes/_type.ttl rename to SGO/ogit/core/attributes/_type.ttl diff --git a/SGO/core/attributes/_v-id.ttl b/SGO/ogit/core/attributes/_v-id.ttl similarity index 100% rename from SGO/core/attributes/_v-id.ttl rename to SGO/ogit/core/attributes/_v-id.ttl diff --git a/SGO/core/attributes/_v.ttl b/SGO/ogit/core/attributes/_v.ttl similarity index 100% rename from SGO/core/attributes/_v.ttl rename to SGO/ogit/core/attributes/_v.ttl diff --git a/SGO/core/attributes/_version.ttl b/SGO/ogit/core/attributes/_version.ttl similarity index 100% rename from SGO/core/attributes/_version.ttl rename to SGO/ogit/core/attributes/_version.ttl diff --git a/SGO/core/attributes/_xid.ttl b/SGO/ogit/core/attributes/_xid.ttl similarity index 100% rename from SGO/core/attributes/_xid.ttl rename to SGO/ogit/core/attributes/_xid.ttl diff --git a/SGO/core/entities/Node.ttl b/SGO/ogit/core/entities/Node.ttl similarity index 100% rename from SGO/core/entities/Node.ttl rename to SGO/ogit/core/entities/Node.ttl diff --git a/SGO/sgo/entities/Account.ttl b/SGO/ogit/entities/Account.ttl similarity index 100% rename from SGO/sgo/entities/Account.ttl rename to SGO/ogit/entities/Account.ttl diff --git a/SGO/sgo/entities/Agent.ttl b/SGO/ogit/entities/Agent.ttl similarity index 100% rename from SGO/sgo/entities/Agent.ttl rename to SGO/ogit/entities/Agent.ttl diff --git a/SGO/sgo/entities/Alert.ttl b/SGO/ogit/entities/Alert.ttl similarity index 100% rename from SGO/sgo/entities/Alert.ttl rename to SGO/ogit/entities/Alert.ttl diff --git a/SGO/sgo/entities/Annotation.ttl b/SGO/ogit/entities/Annotation.ttl similarity index 100% rename from SGO/sgo/entities/Annotation.ttl rename to SGO/ogit/entities/Annotation.ttl diff --git a/SGO/sgo/entities/Asset.ttl b/SGO/ogit/entities/Asset.ttl similarity index 100% rename from SGO/sgo/entities/Asset.ttl rename to SGO/ogit/entities/Asset.ttl diff --git a/SGO/sgo/entities/Attachment.ttl b/SGO/ogit/entities/Attachment.ttl similarity index 100% rename from SGO/sgo/entities/Attachment.ttl rename to SGO/ogit/entities/Attachment.ttl diff --git a/SGO/sgo/entities/Blob.ttl b/SGO/ogit/entities/Blob.ttl similarity index 100% rename from SGO/sgo/entities/Blob.ttl rename to SGO/ogit/entities/Blob.ttl diff --git a/SGO/sgo/entities/Catalog.ttl b/SGO/ogit/entities/Catalog.ttl similarity index 100% rename from SGO/sgo/entities/Catalog.ttl rename to SGO/ogit/entities/Catalog.ttl diff --git a/SGO/sgo/entities/CatalogItem.ttl b/SGO/ogit/entities/CatalogItem.ttl similarity index 100% rename from SGO/sgo/entities/CatalogItem.ttl rename to SGO/ogit/entities/CatalogItem.ttl diff --git a/SGO/sgo/entities/Category.ttl b/SGO/ogit/entities/Category.ttl similarity index 100% rename from SGO/sgo/entities/Category.ttl rename to SGO/ogit/entities/Category.ttl diff --git a/SGO/sgo/entities/Certificate.ttl b/SGO/ogit/entities/Certificate.ttl similarity index 100% rename from SGO/sgo/entities/Certificate.ttl rename to SGO/ogit/entities/Certificate.ttl diff --git a/SGO/sgo/entities/Comment.ttl b/SGO/ogit/entities/Comment.ttl similarity index 100% rename from SGO/sgo/entities/Comment.ttl rename to SGO/ogit/entities/Comment.ttl diff --git a/SGO/sgo/entities/Configuration.ttl b/SGO/ogit/entities/Configuration.ttl similarity index 100% rename from SGO/sgo/entities/Configuration.ttl rename to SGO/ogit/entities/Configuration.ttl diff --git a/SGO/sgo/entities/ConfigurationItem.ttl b/SGO/ogit/entities/ConfigurationItem.ttl similarity index 100% rename from SGO/sgo/entities/ConfigurationItem.ttl rename to SGO/ogit/entities/ConfigurationItem.ttl diff --git a/SGO/sgo/entities/Contract.ttl b/SGO/ogit/entities/Contract.ttl similarity index 100% rename from SGO/sgo/entities/Contract.ttl rename to SGO/ogit/entities/Contract.ttl diff --git a/SGO/sgo/entities/Course.ttl b/SGO/ogit/entities/Course.ttl similarity index 100% rename from SGO/sgo/entities/Course.ttl rename to SGO/ogit/entities/Course.ttl diff --git a/SGO/sgo/entities/CustomApplicationData.ttl b/SGO/ogit/entities/CustomApplicationData.ttl similarity index 100% rename from SGO/sgo/entities/CustomApplicationData.ttl rename to SGO/ogit/entities/CustomApplicationData.ttl diff --git a/SGO/sgo/entities/Device.ttl b/SGO/ogit/entities/Device.ttl similarity index 100% rename from SGO/sgo/entities/Device.ttl rename to SGO/ogit/entities/Device.ttl diff --git a/SGO/sgo/entities/Email.ttl b/SGO/ogit/entities/Email.ttl similarity index 100% rename from SGO/sgo/entities/Email.ttl rename to SGO/ogit/entities/Email.ttl diff --git a/SGO/sgo/entities/Environment.ttl b/SGO/ogit/entities/Environment.ttl similarity index 100% rename from SGO/sgo/entities/Environment.ttl rename to SGO/ogit/entities/Environment.ttl diff --git a/SGO/sgo/entities/Equivalence.ttl b/SGO/ogit/entities/Equivalence.ttl similarity index 100% rename from SGO/sgo/entities/Equivalence.ttl rename to SGO/ogit/entities/Equivalence.ttl diff --git a/SGO/sgo/entities/Event.ttl b/SGO/ogit/entities/Event.ttl similarity index 100% rename from SGO/sgo/entities/Event.ttl rename to SGO/ogit/entities/Event.ttl diff --git a/SGO/sgo/entities/Feature.ttl b/SGO/ogit/entities/Feature.ttl similarity index 100% rename from SGO/sgo/entities/Feature.ttl rename to SGO/ogit/entities/Feature.ttl diff --git a/SGO/sgo/entities/Hyperedge.ttl b/SGO/ogit/entities/Hyperedge.ttl similarity index 100% rename from SGO/sgo/entities/Hyperedge.ttl rename to SGO/ogit/entities/Hyperedge.ttl diff --git a/SGO/sgo/entities/Hyperlink.ttl b/SGO/ogit/entities/Hyperlink.ttl similarity index 100% rename from SGO/sgo/entities/Hyperlink.ttl rename to SGO/ogit/entities/Hyperlink.ttl diff --git a/SGO/sgo/entities/Installation.ttl b/SGO/ogit/entities/Installation.ttl similarity index 100% rename from SGO/sgo/entities/Installation.ttl rename to SGO/ogit/entities/Installation.ttl diff --git a/SGO/sgo/entities/Intent.ttl b/SGO/ogit/entities/Intent.ttl similarity index 100% rename from SGO/sgo/entities/Intent.ttl rename to SGO/ogit/entities/Intent.ttl diff --git a/SGO/sgo/entities/Keyword.ttl b/SGO/ogit/entities/Keyword.ttl similarity index 100% rename from SGO/sgo/entities/Keyword.ttl rename to SGO/ogit/entities/Keyword.ttl diff --git a/SGO/sgo/entities/License.ttl b/SGO/ogit/entities/License.ttl similarity index 100% rename from SGO/sgo/entities/License.ttl rename to SGO/ogit/entities/License.ttl diff --git a/SGO/sgo/entities/LicenseRequest.ttl b/SGO/ogit/entities/LicenseRequest.ttl similarity index 100% rename from SGO/sgo/entities/LicenseRequest.ttl rename to SGO/ogit/entities/LicenseRequest.ttl diff --git a/SGO/sgo/entities/LicenseToken.ttl b/SGO/ogit/entities/LicenseToken.ttl similarity index 100% rename from SGO/sgo/entities/LicenseToken.ttl rename to SGO/ogit/entities/LicenseToken.ttl diff --git a/SGO/sgo/entities/Location.ttl b/SGO/ogit/entities/Location.ttl similarity index 100% rename from SGO/sgo/entities/Location.ttl rename to SGO/ogit/entities/Location.ttl diff --git a/SGO/sgo/entities/Note.ttl b/SGO/ogit/entities/Note.ttl similarity index 100% rename from SGO/sgo/entities/Note.ttl rename to SGO/ogit/entities/Note.ttl diff --git a/SGO/sgo/entities/Notification.ttl b/SGO/ogit/entities/Notification.ttl similarity index 100% rename from SGO/sgo/entities/Notification.ttl rename to SGO/ogit/entities/Notification.ttl diff --git a/SGO/sgo/entities/Offer.ttl b/SGO/ogit/entities/Offer.ttl similarity index 100% rename from SGO/sgo/entities/Offer.ttl rename to SGO/ogit/entities/Offer.ttl diff --git a/SGO/sgo/entities/Organization.ttl b/SGO/ogit/entities/Organization.ttl similarity index 100% rename from SGO/sgo/entities/Organization.ttl rename to SGO/ogit/entities/Organization.ttl diff --git a/SGO/sgo/entities/Parameter.ttl b/SGO/ogit/entities/Parameter.ttl similarity index 100% rename from SGO/sgo/entities/Parameter.ttl rename to SGO/ogit/entities/Parameter.ttl diff --git a/SGO/sgo/entities/ParameterType.ttl b/SGO/ogit/entities/ParameterType.ttl similarity index 100% rename from SGO/sgo/entities/ParameterType.ttl rename to SGO/ogit/entities/ParameterType.ttl diff --git a/SGO/sgo/entities/Penalty.ttl b/SGO/ogit/entities/Penalty.ttl similarity index 100% rename from SGO/sgo/entities/Penalty.ttl rename to SGO/ogit/entities/Penalty.ttl diff --git a/SGO/sgo/entities/Person.ttl b/SGO/ogit/entities/Person.ttl similarity index 100% rename from SGO/sgo/entities/Person.ttl rename to SGO/ogit/entities/Person.ttl diff --git a/SGO/sgo/entities/Policy.ttl b/SGO/ogit/entities/Policy.ttl similarity index 100% rename from SGO/sgo/entities/Policy.ttl rename to SGO/ogit/entities/Policy.ttl diff --git a/SGO/sgo/entities/Product.ttl b/SGO/ogit/entities/Product.ttl similarity index 100% rename from SGO/sgo/entities/Product.ttl rename to SGO/ogit/entities/Product.ttl diff --git a/SGO/sgo/entities/Question.ttl b/SGO/ogit/entities/Question.ttl similarity index 100% rename from SGO/sgo/entities/Question.ttl rename to SGO/ogit/entities/Question.ttl diff --git a/SGO/sgo/entities/Rating.ttl b/SGO/ogit/entities/Rating.ttl similarity index 100% rename from SGO/sgo/entities/Rating.ttl rename to SGO/ogit/entities/Rating.ttl diff --git a/SGO/sgo/entities/Region.ttl b/SGO/ogit/entities/Region.ttl similarity index 100% rename from SGO/sgo/entities/Region.ttl rename to SGO/ogit/entities/Region.ttl diff --git a/SGO/sgo/entities/Relevance.ttl b/SGO/ogit/entities/Relevance.ttl similarity index 100% rename from SGO/sgo/entities/Relevance.ttl rename to SGO/ogit/entities/Relevance.ttl diff --git a/SGO/sgo/entities/ReportedStatistic.ttl b/SGO/ogit/entities/ReportedStatistic.ttl similarity index 100% rename from SGO/sgo/entities/ReportedStatistic.ttl rename to SGO/ogit/entities/ReportedStatistic.ttl diff --git a/SGO/sgo/entities/Requirements.ttl b/SGO/ogit/entities/Requirements.ttl similarity index 100% rename from SGO/sgo/entities/Requirements.ttl rename to SGO/ogit/entities/Requirements.ttl diff --git a/SGO/sgo/entities/Role.ttl b/SGO/ogit/entities/Role.ttl similarity index 100% rename from SGO/sgo/entities/Role.ttl rename to SGO/ogit/entities/Role.ttl diff --git a/SGO/sgo/entities/RoleAssignment.ttl b/SGO/ogit/entities/RoleAssignment.ttl similarity index 100% rename from SGO/sgo/entities/RoleAssignment.ttl rename to SGO/ogit/entities/RoleAssignment.ttl diff --git a/SGO/sgo/entities/Schema.ttl b/SGO/ogit/entities/Schema.ttl similarity index 100% rename from SGO/sgo/entities/Schema.ttl rename to SGO/ogit/entities/Schema.ttl diff --git a/SGO/sgo/entities/Series.ttl b/SGO/ogit/entities/Series.ttl similarity index 100% rename from SGO/sgo/entities/Series.ttl rename to SGO/ogit/entities/Series.ttl diff --git a/SGO/sgo/entities/Status.ttl b/SGO/ogit/entities/Status.ttl similarity index 100% rename from SGO/sgo/entities/Status.ttl rename to SGO/ogit/entities/Status.ttl diff --git a/SGO/sgo/entities/Subscription.ttl b/SGO/ogit/entities/Subscription.ttl similarity index 100% rename from SGO/sgo/entities/Subscription.ttl rename to SGO/ogit/entities/Subscription.ttl diff --git a/SGO/sgo/entities/Tag.ttl b/SGO/ogit/entities/Tag.ttl similarity index 100% rename from SGO/sgo/entities/Tag.ttl rename to SGO/ogit/entities/Tag.ttl diff --git a/SGO/sgo/entities/Task.ttl b/SGO/ogit/entities/Task.ttl similarity index 100% rename from SGO/sgo/entities/Task.ttl rename to SGO/ogit/entities/Task.ttl diff --git a/SGO/sgo/entities/TaskList.ttl b/SGO/ogit/entities/TaskList.ttl similarity index 100% rename from SGO/sgo/entities/TaskList.ttl rename to SGO/ogit/entities/TaskList.ttl diff --git a/SGO/sgo/entities/TermsAndConditions.ttl b/SGO/ogit/entities/TermsAndConditions.ttl similarity index 100% rename from SGO/sgo/entities/TermsAndConditions.ttl rename to SGO/ogit/entities/TermsAndConditions.ttl diff --git a/SGO/sgo/entities/Timeseries.ttl b/SGO/ogit/entities/Timeseries.ttl similarity index 100% rename from SGO/sgo/entities/Timeseries.ttl rename to SGO/ogit/entities/Timeseries.ttl diff --git a/SGO/sgo/entities/Tone.ttl b/SGO/ogit/entities/Tone.ttl similarity index 100% rename from SGO/sgo/entities/Tone.ttl rename to SGO/ogit/entities/Tone.ttl diff --git a/SGO/sgo/entities/Vcard.ttl b/SGO/ogit/entities/Vcard.ttl similarity index 100% rename from SGO/sgo/entities/Vcard.ttl rename to SGO/ogit/entities/Vcard.ttl diff --git a/SGO/sgo/entities/VersioningData.ttl b/SGO/ogit/entities/VersioningData.ttl similarity index 100% rename from SGO/sgo/entities/VersioningData.ttl rename to SGO/ogit/entities/VersioningData.ttl diff --git a/SGO/sgo/verbs/accepts.ttl b/SGO/ogit/verbs/accepts.ttl similarity index 100% rename from SGO/sgo/verbs/accepts.ttl rename to SGO/ogit/verbs/accepts.ttl diff --git a/SGO/sgo/verbs/activates.ttl b/SGO/ogit/verbs/activates.ttl similarity index 100% rename from SGO/sgo/verbs/activates.ttl rename to SGO/ogit/verbs/activates.ttl diff --git a/SGO/sgo/verbs/actsOnBehalfOf.ttl b/SGO/ogit/verbs/actsOnBehalfOf.ttl similarity index 100% rename from SGO/sgo/verbs/actsOnBehalfOf.ttl rename to SGO/ogit/verbs/actsOnBehalfOf.ttl diff --git a/SGO/sgo/verbs/administratorInInsolvencyOf.ttl b/SGO/ogit/verbs/administratorInInsolvencyOf.ttl similarity index 100% rename from SGO/sgo/verbs/administratorInInsolvencyOf.ttl rename to SGO/ogit/verbs/administratorInInsolvencyOf.ttl diff --git a/SGO/sgo/verbs/administratorOf.ttl b/SGO/ogit/verbs/administratorOf.ttl similarity index 100% rename from SGO/sgo/verbs/administratorOf.ttl rename to SGO/ogit/verbs/administratorOf.ttl diff --git a/SGO/sgo/verbs/affects.ttl b/SGO/ogit/verbs/affects.ttl similarity index 100% rename from SGO/sgo/verbs/affects.ttl rename to SGO/ogit/verbs/affects.ttl diff --git a/SGO/sgo/verbs/affiliateOf.ttl b/SGO/ogit/verbs/affiliateOf.ttl similarity index 100% rename from SGO/sgo/verbs/affiliateOf.ttl rename to SGO/ogit/verbs/affiliateOf.ttl diff --git a/SGO/sgo/verbs/alerts.ttl b/SGO/ogit/verbs/alerts.ttl similarity index 100% rename from SGO/sgo/verbs/alerts.ttl rename to SGO/ogit/verbs/alerts.ttl diff --git a/SGO/sgo/verbs/approves.ttl b/SGO/ogit/verbs/approves.ttl similarity index 100% rename from SGO/sgo/verbs/approves.ttl rename to SGO/ogit/verbs/approves.ttl diff --git a/SGO/sgo/verbs/assignedTo.ttl b/SGO/ogit/verbs/assignedTo.ttl similarity index 100% rename from SGO/sgo/verbs/assignedTo.ttl rename to SGO/ogit/verbs/assignedTo.ttl diff --git a/SGO/sgo/verbs/associates.ttl b/SGO/ogit/verbs/associates.ttl similarity index 100% rename from SGO/sgo/verbs/associates.ttl rename to SGO/ogit/verbs/associates.ttl diff --git a/SGO/sgo/verbs/assumes.ttl b/SGO/ogit/verbs/assumes.ttl similarity index 100% rename from SGO/sgo/verbs/assumes.ttl rename to SGO/ogit/verbs/assumes.ttl diff --git a/SGO/sgo/verbs/auditCommitteeMemberOf.ttl b/SGO/ogit/verbs/auditCommitteeMemberOf.ttl similarity index 100% rename from SGO/sgo/verbs/auditCommitteeMemberOf.ttl rename to SGO/ogit/verbs/auditCommitteeMemberOf.ttl diff --git a/SGO/sgo/verbs/auditorOf.ttl b/SGO/ogit/verbs/auditorOf.ttl similarity index 100% rename from SGO/sgo/verbs/auditorOf.ttl rename to SGO/ogit/verbs/auditorOf.ttl diff --git a/SGO/sgo/verbs/availableIn.ttl b/SGO/ogit/verbs/availableIn.ttl similarity index 100% rename from SGO/sgo/verbs/availableIn.ttl rename to SGO/ogit/verbs/availableIn.ttl diff --git a/SGO/sgo/verbs/belongs.ttl b/SGO/ogit/verbs/belongs.ttl similarity index 100% rename from SGO/sgo/verbs/belongs.ttl rename to SGO/ogit/verbs/belongs.ttl diff --git a/SGO/sgo/verbs/beneficialOwnerOf.ttl b/SGO/ogit/verbs/beneficialOwnerOf.ttl similarity index 100% rename from SGO/sgo/verbs/beneficialOwnerOf.ttl rename to SGO/ogit/verbs/beneficialOwnerOf.ttl diff --git a/SGO/sgo/verbs/beneficiaryOf.ttl b/SGO/ogit/verbs/beneficiaryOf.ttl similarity index 100% rename from SGO/sgo/verbs/beneficiaryOf.ttl rename to SGO/ogit/verbs/beneficiaryOf.ttl diff --git a/SGO/sgo/verbs/bills.ttl b/SGO/ogit/verbs/bills.ttl similarity index 100% rename from SGO/sgo/verbs/bills.ttl rename to SGO/ogit/verbs/bills.ttl diff --git a/SGO/sgo/verbs/boardMemberOf.ttl b/SGO/ogit/verbs/boardMemberOf.ttl similarity index 100% rename from SGO/sgo/verbs/boardMemberOf.ttl rename to SGO/ogit/verbs/boardMemberOf.ttl diff --git a/SGO/sgo/verbs/bornIn.ttl b/SGO/ogit/verbs/bornIn.ttl similarity index 100% rename from SGO/sgo/verbs/bornIn.ttl rename to SGO/ogit/verbs/bornIn.ttl diff --git a/SGO/sgo/verbs/calls.ttl b/SGO/ogit/verbs/calls.ttl similarity index 100% rename from SGO/sgo/verbs/calls.ttl rename to SGO/ogit/verbs/calls.ttl diff --git a/SGO/sgo/verbs/capitalOf.ttl b/SGO/ogit/verbs/capitalOf.ttl similarity index 100% rename from SGO/sgo/verbs/capitalOf.ttl rename to SGO/ogit/verbs/capitalOf.ttl diff --git a/SGO/sgo/verbs/causes.ttl b/SGO/ogit/verbs/causes.ttl similarity index 100% rename from SGO/sgo/verbs/causes.ttl rename to SGO/ogit/verbs/causes.ttl diff --git a/SGO/sgo/verbs/centerOf.ttl b/SGO/ogit/verbs/centerOf.ttl similarity index 100% rename from SGO/sgo/verbs/centerOf.ttl rename to SGO/ogit/verbs/centerOf.ttl diff --git a/SGO/sgo/verbs/chairmanOf.ttl b/SGO/ogit/verbs/chairmanOf.ttl similarity index 100% rename from SGO/sgo/verbs/chairmanOf.ttl rename to SGO/ogit/verbs/chairmanOf.ttl diff --git a/SGO/sgo/verbs/closes.ttl b/SGO/ogit/verbs/closes.ttl similarity index 100% rename from SGO/sgo/verbs/closes.ttl rename to SGO/ogit/verbs/closes.ttl diff --git a/SGO/sgo/verbs/closest.ttl b/SGO/ogit/verbs/closest.ttl similarity index 100% rename from SGO/sgo/verbs/closest.ttl rename to SGO/ogit/verbs/closest.ttl diff --git a/SGO/sgo/verbs/communicatesWith.ttl b/SGO/ogit/verbs/communicatesWith.ttl similarity index 100% rename from SGO/sgo/verbs/communicatesWith.ttl rename to SGO/ogit/verbs/communicatesWith.ttl diff --git a/SGO/sgo/verbs/competes.ttl b/SGO/ogit/verbs/competes.ttl similarity index 100% rename from SGO/sgo/verbs/competes.ttl rename to SGO/ogit/verbs/competes.ttl diff --git a/SGO/sgo/verbs/complianceOfficerOf.ttl b/SGO/ogit/verbs/complianceOfficerOf.ttl similarity index 100% rename from SGO/sgo/verbs/complianceOfficerOf.ttl rename to SGO/ogit/verbs/complianceOfficerOf.ttl diff --git a/SGO/sgo/verbs/complies.ttl b/SGO/ogit/verbs/complies.ttl similarity index 100% rename from SGO/sgo/verbs/complies.ttl rename to SGO/ogit/verbs/complies.ttl diff --git a/SGO/sgo/verbs/concludes.ttl b/SGO/ogit/verbs/concludes.ttl similarity index 100% rename from SGO/sgo/verbs/concludes.ttl rename to SGO/ogit/verbs/concludes.ttl diff --git a/SGO/sgo/verbs/conducts.ttl b/SGO/ogit/verbs/conducts.ttl similarity index 100% rename from SGO/sgo/verbs/conducts.ttl rename to SGO/ogit/verbs/conducts.ttl diff --git a/SGO/sgo/verbs/configures.ttl b/SGO/ogit/verbs/configures.ttl similarity index 100% rename from SGO/sgo/verbs/configures.ttl rename to SGO/ogit/verbs/configures.ttl diff --git a/SGO/sgo/verbs/conformsTo.ttl b/SGO/ogit/verbs/conformsTo.ttl similarity index 100% rename from SGO/sgo/verbs/conformsTo.ttl rename to SGO/ogit/verbs/conformsTo.ttl diff --git a/SGO/sgo/verbs/connects.ttl b/SGO/ogit/verbs/connects.ttl similarity index 100% rename from SGO/sgo/verbs/connects.ttl rename to SGO/ogit/verbs/connects.ttl diff --git a/SGO/sgo/verbs/consistsOf.ttl b/SGO/ogit/verbs/consistsOf.ttl similarity index 100% rename from SGO/sgo/verbs/consistsOf.ttl rename to SGO/ogit/verbs/consistsOf.ttl diff --git a/SGO/sgo/verbs/consumes.ttl b/SGO/ogit/verbs/consumes.ttl similarity index 100% rename from SGO/sgo/verbs/consumes.ttl rename to SGO/ogit/verbs/consumes.ttl diff --git a/SGO/sgo/verbs/contains.ttl b/SGO/ogit/verbs/contains.ttl similarity index 100% rename from SGO/sgo/verbs/contains.ttl rename to SGO/ogit/verbs/contains.ttl diff --git a/SGO/sgo/verbs/contractsFor.ttl b/SGO/ogit/verbs/contractsFor.ttl similarity index 100% rename from SGO/sgo/verbs/contractsFor.ttl rename to SGO/ogit/verbs/contractsFor.ttl diff --git a/SGO/sgo/verbs/contributes.ttl b/SGO/ogit/verbs/contributes.ttl similarity index 100% rename from SGO/sgo/verbs/contributes.ttl rename to SGO/ogit/verbs/contributes.ttl diff --git a/SGO/sgo/verbs/controlledBy.ttl b/SGO/ogit/verbs/controlledBy.ttl similarity index 100% rename from SGO/sgo/verbs/controlledBy.ttl rename to SGO/ogit/verbs/controlledBy.ttl diff --git a/SGO/sgo/verbs/corresponds.ttl b/SGO/ogit/verbs/corresponds.ttl similarity index 100% rename from SGO/sgo/verbs/corresponds.ttl rename to SGO/ogit/verbs/corresponds.ttl diff --git a/SGO/sgo/verbs/covers.ttl b/SGO/ogit/verbs/covers.ttl similarity index 100% rename from SGO/sgo/verbs/covers.ttl rename to SGO/ogit/verbs/covers.ttl diff --git a/SGO/sgo/verbs/creates.ttl b/SGO/ogit/verbs/creates.ttl similarity index 100% rename from SGO/sgo/verbs/creates.ttl rename to SGO/ogit/verbs/creates.ttl diff --git a/SGO/sgo/verbs/custodianOf.ttl b/SGO/ogit/verbs/custodianOf.ttl similarity index 100% rename from SGO/sgo/verbs/custodianOf.ttl rename to SGO/ogit/verbs/custodianOf.ttl diff --git a/SGO/sgo/verbs/defines.ttl b/SGO/ogit/verbs/defines.ttl similarity index 100% rename from SGO/sgo/verbs/defines.ttl rename to SGO/ogit/verbs/defines.ttl diff --git a/SGO/sgo/verbs/deliversTo.ttl b/SGO/ogit/verbs/deliversTo.ttl similarity index 100% rename from SGO/sgo/verbs/deliversTo.ttl rename to SGO/ogit/verbs/deliversTo.ttl diff --git a/SGO/sgo/verbs/dependsOn.ttl b/SGO/ogit/verbs/dependsOn.ttl similarity index 100% rename from SGO/sgo/verbs/dependsOn.ttl rename to SGO/ogit/verbs/dependsOn.ttl diff --git a/SGO/sgo/verbs/deployedTo.ttl b/SGO/ogit/verbs/deployedTo.ttl similarity index 100% rename from SGO/sgo/verbs/deployedTo.ttl rename to SGO/ogit/verbs/deployedTo.ttl diff --git a/SGO/sgo/verbs/derivesFrom.ttl b/SGO/ogit/verbs/derivesFrom.ttl similarity index 100% rename from SGO/sgo/verbs/derivesFrom.ttl rename to SGO/ogit/verbs/derivesFrom.ttl diff --git a/SGO/sgo/verbs/describes.ttl b/SGO/ogit/verbs/describes.ttl similarity index 100% rename from SGO/sgo/verbs/describes.ttl rename to SGO/ogit/verbs/describes.ttl diff --git a/SGO/sgo/verbs/desires.ttl b/SGO/ogit/verbs/desires.ttl similarity index 100% rename from SGO/sgo/verbs/desires.ttl rename to SGO/ogit/verbs/desires.ttl diff --git a/SGO/sgo/verbs/directorOf.ttl b/SGO/ogit/verbs/directorOf.ttl similarity index 100% rename from SGO/sgo/verbs/directorOf.ttl rename to SGO/ogit/verbs/directorOf.ttl diff --git a/SGO/sgo/verbs/dislikes.ttl b/SGO/ogit/verbs/dislikes.ttl similarity index 100% rename from SGO/sgo/verbs/dislikes.ttl rename to SGO/ogit/verbs/dislikes.ttl diff --git a/SGO/sgo/verbs/employs.ttl b/SGO/ogit/verbs/employs.ttl similarity index 100% rename from SGO/sgo/verbs/employs.ttl rename to SGO/ogit/verbs/employs.ttl diff --git a/SGO/sgo/verbs/endorses.ttl b/SGO/ogit/verbs/endorses.ttl similarity index 100% rename from SGO/sgo/verbs/endorses.ttl rename to SGO/ogit/verbs/endorses.ttl diff --git a/SGO/sgo/verbs/executorOf.ttl b/SGO/ogit/verbs/executorOf.ttl similarity index 100% rename from SGO/sgo/verbs/executorOf.ttl rename to SGO/ogit/verbs/executorOf.ttl diff --git a/SGO/sgo/verbs/extends.ttl b/SGO/ogit/verbs/extends.ttl similarity index 100% rename from SGO/sgo/verbs/extends.ttl rename to SGO/ogit/verbs/extends.ttl diff --git a/SGO/sgo/verbs/follows.ttl b/SGO/ogit/verbs/follows.ttl similarity index 100% rename from SGO/sgo/verbs/follows.ttl rename to SGO/ogit/verbs/follows.ttl diff --git a/SGO/sgo/verbs/forks.ttl b/SGO/ogit/verbs/forks.ttl similarity index 100% rename from SGO/sgo/verbs/forks.ttl rename to SGO/ogit/verbs/forks.ttl diff --git a/SGO/sgo/verbs/generatedFrom.ttl b/SGO/ogit/verbs/generatedFrom.ttl similarity index 100% rename from SGO/sgo/verbs/generatedFrom.ttl rename to SGO/ogit/verbs/generatedFrom.ttl diff --git a/SGO/sgo/verbs/generates.ttl b/SGO/ogit/verbs/generates.ttl similarity index 100% rename from SGO/sgo/verbs/generates.ttl rename to SGO/ogit/verbs/generates.ttl diff --git a/SGO/sgo/verbs/governs.ttl b/SGO/ogit/verbs/governs.ttl similarity index 100% rename from SGO/sgo/verbs/governs.ttl rename to SGO/ogit/verbs/governs.ttl diff --git a/SGO/sgo/verbs/has.ttl b/SGO/ogit/verbs/has.ttl similarity index 100% rename from SGO/sgo/verbs/has.ttl rename to SGO/ogit/verbs/has.ttl diff --git a/SGO/sgo/verbs/hasChild.ttl b/SGO/ogit/verbs/hasChild.ttl similarity index 100% rename from SGO/sgo/verbs/hasChild.ttl rename to SGO/ogit/verbs/hasChild.ttl diff --git a/SGO/sgo/verbs/hasCousin.ttl b/SGO/ogit/verbs/hasCousin.ttl similarity index 100% rename from SGO/sgo/verbs/hasCousin.ttl rename to SGO/ogit/verbs/hasCousin.ttl diff --git a/SGO/sgo/verbs/hasFormerSpouse.ttl b/SGO/ogit/verbs/hasFormerSpouse.ttl similarity index 100% rename from SGO/sgo/verbs/hasFormerSpouse.ttl rename to SGO/ogit/verbs/hasFormerSpouse.ttl diff --git a/SGO/sgo/verbs/hasGrandchild.ttl b/SGO/ogit/verbs/hasGrandchild.ttl similarity index 100% rename from SGO/sgo/verbs/hasGrandchild.ttl rename to SGO/ogit/verbs/hasGrandchild.ttl diff --git a/SGO/sgo/verbs/hasGrandparent.ttl b/SGO/ogit/verbs/hasGrandparent.ttl similarity index 100% rename from SGO/sgo/verbs/hasGrandparent.ttl rename to SGO/ogit/verbs/hasGrandparent.ttl diff --git a/SGO/sgo/verbs/hasGuardian.ttl b/SGO/ogit/verbs/hasGuardian.ttl similarity index 100% rename from SGO/sgo/verbs/hasGuardian.ttl rename to SGO/ogit/verbs/hasGuardian.ttl diff --git a/SGO/sgo/verbs/hasInLaw.ttl b/SGO/ogit/verbs/hasInLaw.ttl similarity index 100% rename from SGO/sgo/verbs/hasInLaw.ttl rename to SGO/ogit/verbs/hasInLaw.ttl diff --git a/SGO/sgo/verbs/hasNationality.ttl b/SGO/ogit/verbs/hasNationality.ttl similarity index 100% rename from SGO/sgo/verbs/hasNationality.ttl rename to SGO/ogit/verbs/hasNationality.ttl diff --git a/SGO/sgo/verbs/hasNieceNephew.ttl b/SGO/ogit/verbs/hasNieceNephew.ttl similarity index 100% rename from SGO/sgo/verbs/hasNieceNephew.ttl rename to SGO/ogit/verbs/hasNieceNephew.ttl diff --git a/SGO/sgo/verbs/hasParent.ttl b/SGO/ogit/verbs/hasParent.ttl similarity index 100% rename from SGO/sgo/verbs/hasParent.ttl rename to SGO/ogit/verbs/hasParent.ttl diff --git a/SGO/sgo/verbs/hasSibling.ttl b/SGO/ogit/verbs/hasSibling.ttl similarity index 100% rename from SGO/sgo/verbs/hasSibling.ttl rename to SGO/ogit/verbs/hasSibling.ttl diff --git a/SGO/sgo/verbs/hasSpouse.ttl b/SGO/ogit/verbs/hasSpouse.ttl similarity index 100% rename from SGO/sgo/verbs/hasSpouse.ttl rename to SGO/ogit/verbs/hasSpouse.ttl diff --git a/SGO/sgo/verbs/hasUncleAunt.ttl b/SGO/ogit/verbs/hasUncleAunt.ttl similarity index 100% rename from SGO/sgo/verbs/hasUncleAunt.ttl rename to SGO/ogit/verbs/hasUncleAunt.ttl diff --git a/SGO/sgo/verbs/heirOf.ttl b/SGO/ogit/verbs/heirOf.ttl similarity index 100% rename from SGO/sgo/verbs/heirOf.ttl rename to SGO/ogit/verbs/heirOf.ttl diff --git a/SGO/sgo/verbs/hiddenBy.ttl b/SGO/ogit/verbs/hiddenBy.ttl similarity index 100% rename from SGO/sgo/verbs/hiddenBy.ttl rename to SGO/ogit/verbs/hiddenBy.ttl diff --git a/SGO/sgo/verbs/holds.ttl b/SGO/ogit/verbs/holds.ttl similarity index 100% rename from SGO/sgo/verbs/holds.ttl rename to SGO/ogit/verbs/holds.ttl diff --git a/SGO/sgo/verbs/hosts.ttl b/SGO/ogit/verbs/hosts.ttl similarity index 100% rename from SGO/sgo/verbs/hosts.ttl rename to SGO/ogit/verbs/hosts.ttl diff --git a/SGO/sgo/verbs/ignores.ttl b/SGO/ogit/verbs/ignores.ttl similarity index 100% rename from SGO/sgo/verbs/ignores.ttl rename to SGO/ogit/verbs/ignores.ttl diff --git a/SGO/sgo/verbs/implements.ttl b/SGO/ogit/verbs/implements.ttl similarity index 100% rename from SGO/sgo/verbs/implements.ttl rename to SGO/ogit/verbs/implements.ttl diff --git a/SGO/sgo/verbs/includes.ttl b/SGO/ogit/verbs/includes.ttl similarity index 100% rename from SGO/sgo/verbs/includes.ttl rename to SGO/ogit/verbs/includes.ttl diff --git a/SGO/sgo/verbs/installs.ttl b/SGO/ogit/verbs/installs.ttl similarity index 100% rename from SGO/sgo/verbs/installs.ttl rename to SGO/ogit/verbs/installs.ttl diff --git a/SGO/sgo/verbs/investmentManagerOf.ttl b/SGO/ogit/verbs/investmentManagerOf.ttl similarity index 100% rename from SGO/sgo/verbs/investmentManagerOf.ttl rename to SGO/ogit/verbs/investmentManagerOf.ttl diff --git a/SGO/sgo/verbs/invites.ttl b/SGO/ogit/verbs/invites.ttl similarity index 100% rename from SGO/sgo/verbs/invites.ttl rename to SGO/ogit/verbs/invites.ttl diff --git a/SGO/sgo/verbs/isEntitledTo.ttl b/SGO/ogit/verbs/isEntitledTo.ttl similarity index 100% rename from SGO/sgo/verbs/isEntitledTo.ttl rename to SGO/ogit/verbs/isEntitledTo.ttl diff --git a/SGO/sgo/verbs/isMemberOf.ttl b/SGO/ogit/verbs/isMemberOf.ttl similarity index 100% rename from SGO/sgo/verbs/isMemberOf.ttl rename to SGO/ogit/verbs/isMemberOf.ttl diff --git a/SGO/sgo/verbs/isPartOf.ttl b/SGO/ogit/verbs/isPartOf.ttl similarity index 100% rename from SGO/sgo/verbs/isPartOf.ttl rename to SGO/ogit/verbs/isPartOf.ttl diff --git a/SGO/sgo/verbs/isPresent.ttl b/SGO/ogit/verbs/isPresent.ttl similarity index 100% rename from SGO/sgo/verbs/isPresent.ttl rename to SGO/ogit/verbs/isPresent.ttl diff --git a/SGO/sgo/verbs/isResponsibleFor.ttl b/SGO/ogit/verbs/isResponsibleFor.ttl similarity index 100% rename from SGO/sgo/verbs/isResponsibleFor.ttl rename to SGO/ogit/verbs/isResponsibleFor.ttl diff --git a/SGO/sgo/verbs/issues.ttl b/SGO/ogit/verbs/issues.ttl similarity index 100% rename from SGO/sgo/verbs/issues.ttl rename to SGO/ogit/verbs/issues.ttl diff --git a/SGO/sgo/verbs/leads.ttl b/SGO/ogit/verbs/leads.ttl similarity index 100% rename from SGO/sgo/verbs/leads.ttl rename to SGO/ogit/verbs/leads.ttl diff --git a/SGO/sgo/verbs/likes.ttl b/SGO/ogit/verbs/likes.ttl similarity index 100% rename from SGO/sgo/verbs/likes.ttl rename to SGO/ogit/verbs/likes.ttl diff --git a/SGO/sgo/verbs/liquidatorOf.ttl b/SGO/ogit/verbs/liquidatorOf.ttl similarity index 100% rename from SGO/sgo/verbs/liquidatorOf.ttl rename to SGO/ogit/verbs/liquidatorOf.ttl diff --git a/SGO/sgo/verbs/listedAt.ttl b/SGO/ogit/verbs/listedAt.ttl similarity index 100% rename from SGO/sgo/verbs/listedAt.ttl rename to SGO/ogit/verbs/listedAt.ttl diff --git a/SGO/sgo/verbs/lobbyistFor.ttl b/SGO/ogit/verbs/lobbyistFor.ttl similarity index 100% rename from SGO/sgo/verbs/lobbyistFor.ttl rename to SGO/ogit/verbs/lobbyistFor.ttl diff --git a/SGO/sgo/verbs/locatedAt.ttl b/SGO/ogit/verbs/locatedAt.ttl similarity index 100% rename from SGO/sgo/verbs/locatedAt.ttl rename to SGO/ogit/verbs/locatedAt.ttl diff --git a/SGO/sgo/verbs/locatedIn.ttl b/SGO/ogit/verbs/locatedIn.ttl similarity index 100% rename from SGO/sgo/verbs/locatedIn.ttl rename to SGO/ogit/verbs/locatedIn.ttl diff --git a/SGO/sgo/verbs/madeOf.ttl b/SGO/ogit/verbs/madeOf.ttl similarity index 100% rename from SGO/sgo/verbs/madeOf.ttl rename to SGO/ogit/verbs/madeOf.ttl diff --git a/SGO/sgo/verbs/manages.ttl b/SGO/ogit/verbs/manages.ttl similarity index 100% rename from SGO/sgo/verbs/manages.ttl rename to SGO/ogit/verbs/manages.ttl diff --git a/SGO/sgo/verbs/mergedWith.ttl b/SGO/ogit/verbs/mergedWith.ttl similarity index 100% rename from SGO/sgo/verbs/mergedWith.ttl rename to SGO/ogit/verbs/mergedWith.ttl diff --git a/SGO/sgo/verbs/moderates.ttl b/SGO/ogit/verbs/moderates.ttl similarity index 100% rename from SGO/sgo/verbs/moderates.ttl rename to SGO/ogit/verbs/moderates.ttl diff --git a/SGO/sgo/verbs/nomineeFor.ttl b/SGO/ogit/verbs/nomineeFor.ttl similarity index 100% rename from SGO/sgo/verbs/nomineeFor.ttl rename to SGO/ogit/verbs/nomineeFor.ttl diff --git a/SGO/sgo/verbs/officerOf.ttl b/SGO/ogit/verbs/officerOf.ttl similarity index 100% rename from SGO/sgo/verbs/officerOf.ttl rename to SGO/ogit/verbs/officerOf.ttl diff --git a/SGO/sgo/verbs/opens.ttl b/SGO/ogit/verbs/opens.ttl similarity index 100% rename from SGO/sgo/verbs/opens.ttl rename to SGO/ogit/verbs/opens.ttl diff --git a/SGO/sgo/verbs/organizes.ttl b/SGO/ogit/verbs/organizes.ttl similarity index 100% rename from SGO/sgo/verbs/organizes.ttl rename to SGO/ogit/verbs/organizes.ttl diff --git a/SGO/sgo/verbs/originatesIn.ttl b/SGO/ogit/verbs/originatesIn.ttl similarity index 100% rename from SGO/sgo/verbs/originatesIn.ttl rename to SGO/ogit/verbs/originatesIn.ttl diff --git a/SGO/sgo/verbs/overrides.ttl b/SGO/ogit/verbs/overrides.ttl similarity index 100% rename from SGO/sgo/verbs/overrides.ttl rename to SGO/ogit/verbs/overrides.ttl diff --git a/SGO/sgo/verbs/owns.ttl b/SGO/ogit/verbs/owns.ttl similarity index 100% rename from SGO/sgo/verbs/owns.ttl rename to SGO/ogit/verbs/owns.ttl diff --git a/SGO/sgo/verbs/partneredWith.ttl b/SGO/ogit/verbs/partneredWith.ttl similarity index 100% rename from SGO/sgo/verbs/partneredWith.ttl rename to SGO/ogit/verbs/partneredWith.ttl diff --git a/SGO/sgo/verbs/performs.ttl b/SGO/ogit/verbs/performs.ttl similarity index 100% rename from SGO/sgo/verbs/performs.ttl rename to SGO/ogit/verbs/performs.ttl diff --git a/SGO/sgo/verbs/plans.ttl b/SGO/ogit/verbs/plans.ttl similarity index 100% rename from SGO/sgo/verbs/plans.ttl rename to SGO/ogit/verbs/plans.ttl diff --git a/SGO/sgo/verbs/precedes.ttl b/SGO/ogit/verbs/precedes.ttl similarity index 100% rename from SGO/sgo/verbs/precedes.ttl rename to SGO/ogit/verbs/precedes.ttl diff --git a/SGO/sgo/verbs/prioritizes.ttl b/SGO/ogit/verbs/prioritizes.ttl similarity index 100% rename from SGO/sgo/verbs/prioritizes.ttl rename to SGO/ogit/verbs/prioritizes.ttl diff --git a/SGO/sgo/verbs/produces.ttl b/SGO/ogit/verbs/produces.ttl similarity index 100% rename from SGO/sgo/verbs/produces.ttl rename to SGO/ogit/verbs/produces.ttl diff --git a/SGO/sgo/verbs/protectorOf.ttl b/SGO/ogit/verbs/protectorOf.ttl similarity index 100% rename from SGO/sgo/verbs/protectorOf.ttl rename to SGO/ogit/verbs/protectorOf.ttl diff --git a/SGO/sgo/verbs/proves.ttl b/SGO/ogit/verbs/proves.ttl similarity index 100% rename from SGO/sgo/verbs/proves.ttl rename to SGO/ogit/verbs/proves.ttl diff --git a/SGO/sgo/verbs/provides.ttl b/SGO/ogit/verbs/provides.ttl similarity index 100% rename from SGO/sgo/verbs/provides.ttl rename to SGO/ogit/verbs/provides.ttl diff --git a/SGO/sgo/verbs/providesServicesTo.ttl b/SGO/ogit/verbs/providesServicesTo.ttl similarity index 100% rename from SGO/sgo/verbs/providesServicesTo.ttl rename to SGO/ogit/verbs/providesServicesTo.ttl diff --git a/SGO/sgo/verbs/publishes.ttl b/SGO/ogit/verbs/publishes.ttl similarity index 100% rename from SGO/sgo/verbs/publishes.ttl rename to SGO/ogit/verbs/publishes.ttl diff --git a/SGO/sgo/verbs/rates.ttl b/SGO/ogit/verbs/rates.ttl similarity index 100% rename from SGO/sgo/verbs/rates.ttl rename to SGO/ogit/verbs/rates.ttl diff --git a/SGO/sgo/verbs/readBy.ttl b/SGO/ogit/verbs/readBy.ttl similarity index 100% rename from SGO/sgo/verbs/readBy.ttl rename to SGO/ogit/verbs/readBy.ttl diff --git a/SGO/sgo/verbs/receiverFor.ttl b/SGO/ogit/verbs/receiverFor.ttl similarity index 100% rename from SGO/sgo/verbs/receiverFor.ttl rename to SGO/ogit/verbs/receiverFor.ttl diff --git a/SGO/sgo/verbs/receives.ttl b/SGO/ogit/verbs/receives.ttl similarity index 100% rename from SGO/sgo/verbs/receives.ttl rename to SGO/ogit/verbs/receives.ttl diff --git a/SGO/sgo/verbs/receivesFrom.ttl b/SGO/ogit/verbs/receivesFrom.ttl similarity index 100% rename from SGO/sgo/verbs/receivesFrom.ttl rename to SGO/ogit/verbs/receivesFrom.ttl diff --git a/SGO/sgo/verbs/recommends.ttl b/SGO/ogit/verbs/recommends.ttl similarity index 100% rename from SGO/sgo/verbs/recommends.ttl rename to SGO/ogit/verbs/recommends.ttl diff --git a/SGO/sgo/verbs/references.ttl b/SGO/ogit/verbs/references.ttl similarity index 100% rename from SGO/sgo/verbs/references.ttl rename to SGO/ogit/verbs/references.ttl diff --git a/SGO/sgo/verbs/registeredAt.ttl b/SGO/ogit/verbs/registeredAt.ttl similarity index 100% rename from SGO/sgo/verbs/registeredAt.ttl rename to SGO/ogit/verbs/registeredAt.ttl diff --git a/SGO/sgo/verbs/registers.ttl b/SGO/ogit/verbs/registers.ttl similarity index 100% rename from SGO/sgo/verbs/registers.ttl rename to SGO/ogit/verbs/registers.ttl diff --git a/SGO/sgo/verbs/rejects.ttl b/SGO/ogit/verbs/rejects.ttl similarity index 100% rename from SGO/sgo/verbs/rejects.ttl rename to SGO/ogit/verbs/rejects.ttl diff --git a/SGO/sgo/verbs/relates.ttl b/SGO/ogit/verbs/relates.ttl similarity index 100% rename from SGO/sgo/verbs/relates.ttl rename to SGO/ogit/verbs/relates.ttl diff --git a/SGO/sgo/verbs/repliedWith.ttl b/SGO/ogit/verbs/repliedWith.ttl similarity index 100% rename from SGO/sgo/verbs/repliedWith.ttl rename to SGO/ogit/verbs/repliedWith.ttl diff --git a/SGO/sgo/verbs/reportedOn.ttl b/SGO/ogit/verbs/reportedOn.ttl similarity index 100% rename from SGO/sgo/verbs/reportedOn.ttl rename to SGO/ogit/verbs/reportedOn.ttl diff --git a/SGO/sgo/verbs/reports.ttl b/SGO/ogit/verbs/reports.ttl similarity index 100% rename from SGO/sgo/verbs/reports.ttl rename to SGO/ogit/verbs/reports.ttl diff --git a/SGO/sgo/verbs/represents.ttl b/SGO/ogit/verbs/represents.ttl similarity index 100% rename from SGO/sgo/verbs/represents.ttl rename to SGO/ogit/verbs/represents.ttl diff --git a/SGO/sgo/verbs/requests.ttl b/SGO/ogit/verbs/requests.ttl similarity index 100% rename from SGO/sgo/verbs/requests.ttl rename to SGO/ogit/verbs/requests.ttl diff --git a/SGO/sgo/verbs/requires.ttl b/SGO/ogit/verbs/requires.ttl similarity index 100% rename from SGO/sgo/verbs/requires.ttl rename to SGO/ogit/verbs/requires.ttl diff --git a/SGO/sgo/verbs/residesIn.ttl b/SGO/ogit/verbs/residesIn.ttl similarity index 100% rename from SGO/sgo/verbs/residesIn.ttl rename to SGO/ogit/verbs/residesIn.ttl diff --git a/SGO/sgo/verbs/resolves.ttl b/SGO/ogit/verbs/resolves.ttl similarity index 100% rename from SGO/sgo/verbs/resolves.ttl rename to SGO/ogit/verbs/resolves.ttl diff --git a/SGO/sgo/verbs/responds.ttl b/SGO/ogit/verbs/responds.ttl similarity index 100% rename from SGO/sgo/verbs/responds.ttl rename to SGO/ogit/verbs/responds.ttl diff --git a/SGO/sgo/verbs/reviews.ttl b/SGO/ogit/verbs/reviews.ttl similarity index 100% rename from SGO/sgo/verbs/reviews.ttl rename to SGO/ogit/verbs/reviews.ttl diff --git a/SGO/sgo/verbs/runsOn.ttl b/SGO/ogit/verbs/runsOn.ttl similarity index 100% rename from SGO/sgo/verbs/runsOn.ttl rename to SGO/ogit/verbs/runsOn.ttl diff --git a/SGO/sgo/verbs/sameAs.ttl b/SGO/ogit/verbs/sameAs.ttl similarity index 100% rename from SGO/sgo/verbs/sameAs.ttl rename to SGO/ogit/verbs/sameAs.ttl diff --git a/SGO/sgo/verbs/seenBy.ttl b/SGO/ogit/verbs/seenBy.ttl similarity index 100% rename from SGO/sgo/verbs/seenBy.ttl rename to SGO/ogit/verbs/seenBy.ttl diff --git a/SGO/sgo/verbs/sells.ttl b/SGO/ogit/verbs/sells.ttl similarity index 100% rename from SGO/sgo/verbs/sells.ttl rename to SGO/ogit/verbs/sells.ttl diff --git a/SGO/sgo/verbs/sellsTo.ttl b/SGO/ogit/verbs/sellsTo.ttl similarity index 100% rename from SGO/sgo/verbs/sellsTo.ttl rename to SGO/ogit/verbs/sellsTo.ttl diff --git a/SGO/sgo/verbs/sends.ttl b/SGO/ogit/verbs/sends.ttl similarity index 100% rename from SGO/sgo/verbs/sends.ttl rename to SGO/ogit/verbs/sends.ttl diff --git a/SGO/sgo/verbs/settlorOf.ttl b/SGO/ogit/verbs/settlorOf.ttl similarity index 100% rename from SGO/sgo/verbs/settlorOf.ttl rename to SGO/ogit/verbs/settlorOf.ttl diff --git a/SGO/sgo/verbs/signatoryFor.ttl b/SGO/ogit/verbs/signatoryFor.ttl similarity index 100% rename from SGO/sgo/verbs/signatoryFor.ttl rename to SGO/ogit/verbs/signatoryFor.ttl diff --git a/SGO/sgo/verbs/soldTo.ttl b/SGO/ogit/verbs/soldTo.ttl similarity index 100% rename from SGO/sgo/verbs/soldTo.ttl rename to SGO/ogit/verbs/soldTo.ttl diff --git a/SGO/sgo/verbs/solves.ttl b/SGO/ogit/verbs/solves.ttl similarity index 100% rename from SGO/sgo/verbs/solves.ttl rename to SGO/ogit/verbs/solves.ttl diff --git a/SGO/sgo/verbs/specifies.ttl b/SGO/ogit/verbs/specifies.ttl similarity index 100% rename from SGO/sgo/verbs/specifies.ttl rename to SGO/ogit/verbs/specifies.ttl diff --git a/SGO/sgo/verbs/subscribes.ttl b/SGO/ogit/verbs/subscribes.ttl similarity index 100% rename from SGO/sgo/verbs/subscribes.ttl rename to SGO/ogit/verbs/subscribes.ttl diff --git a/SGO/sgo/verbs/subsidiaryOf.ttl b/SGO/ogit/verbs/subsidiaryOf.ttl similarity index 100% rename from SGO/sgo/verbs/subsidiaryOf.ttl rename to SGO/ogit/verbs/subsidiaryOf.ttl diff --git a/SGO/sgo/verbs/supervises.ttl b/SGO/ogit/verbs/supervises.ttl similarity index 100% rename from SGO/sgo/verbs/supervises.ttl rename to SGO/ogit/verbs/supervises.ttl diff --git a/SGO/sgo/verbs/supports.ttl b/SGO/ogit/verbs/supports.ttl similarity index 100% rename from SGO/sgo/verbs/supports.ttl rename to SGO/ogit/verbs/supports.ttl diff --git a/SGO/sgo/verbs/tracks.ttl b/SGO/ogit/verbs/tracks.ttl similarity index 100% rename from SGO/sgo/verbs/tracks.ttl rename to SGO/ogit/verbs/tracks.ttl diff --git a/SGO/sgo/verbs/transfers.ttl b/SGO/ogit/verbs/transfers.ttl similarity index 100% rename from SGO/sgo/verbs/transfers.ttl rename to SGO/ogit/verbs/transfers.ttl diff --git a/SGO/sgo/verbs/triggers.ttl b/SGO/ogit/verbs/triggers.ttl similarity index 100% rename from SGO/sgo/verbs/triggers.ttl rename to SGO/ogit/verbs/triggers.ttl diff --git a/SGO/sgo/verbs/trusteeOf.ttl b/SGO/ogit/verbs/trusteeOf.ttl similarity index 100% rename from SGO/sgo/verbs/trusteeOf.ttl rename to SGO/ogit/verbs/trusteeOf.ttl diff --git a/SGO/sgo/verbs/updates.ttl b/SGO/ogit/verbs/updates.ttl similarity index 100% rename from SGO/sgo/verbs/updates.ttl rename to SGO/ogit/verbs/updates.ttl diff --git a/SGO/sgo/verbs/uses.ttl b/SGO/ogit/verbs/uses.ttl similarity index 100% rename from SGO/sgo/verbs/uses.ttl rename to SGO/ogit/verbs/uses.ttl diff --git a/SGO/sgo/verbs/utilizes.ttl b/SGO/ogit/verbs/utilizes.ttl similarity index 100% rename from SGO/sgo/verbs/utilizes.ttl rename to SGO/ogit/verbs/utilizes.ttl diff --git a/SGO/sgo/verbs/validFor.ttl b/SGO/ogit/verbs/validFor.ttl similarity index 100% rename from SGO/sgo/verbs/validFor.ttl rename to SGO/ogit/verbs/validFor.ttl diff --git a/SGO/sgo/verbs/versions.ttl b/SGO/ogit/verbs/versions.ttl similarity index 100% rename from SGO/sgo/verbs/versions.ttl rename to SGO/ogit/verbs/versions.ttl diff --git a/SGO/sgo/verbs/virtualizes.ttl b/SGO/ogit/verbs/virtualizes.ttl similarity index 100% rename from SGO/sgo/verbs/virtualizes.ttl rename to SGO/ogit/verbs/virtualizes.ttl diff --git a/SGO/sgo/verbs/wasBestManFor.ttl b/SGO/ogit/verbs/wasBestManFor.ttl similarity index 100% rename from SGO/sgo/verbs/wasBestManFor.ttl rename to SGO/ogit/verbs/wasBestManFor.ttl diff --git a/SGO/sgo/verbs/wasBridesmaidFor.ttl b/SGO/ogit/verbs/wasBridesmaidFor.ttl similarity index 100% rename from SGO/sgo/verbs/wasBridesmaidFor.ttl rename to SGO/ogit/verbs/wasBridesmaidFor.ttl diff --git a/SGO/sgo/verbs/wasEngagedTo.ttl b/SGO/ogit/verbs/wasEngagedTo.ttl similarity index 100% rename from SGO/sgo/verbs/wasEngagedTo.ttl rename to SGO/ogit/verbs/wasEngagedTo.ttl diff --git a/SGO/sgo/verbs/wasGroomsmanFor.ttl b/SGO/ogit/verbs/wasGroomsmanFor.ttl similarity index 100% rename from SGO/sgo/verbs/wasGroomsmanFor.ttl rename to SGO/ogit/verbs/wasGroomsmanFor.ttl diff --git a/SGO/sgo/verbs/wasMaidOfHonorFor.ttl b/SGO/ogit/verbs/wasMaidOfHonorFor.ttl similarity index 100% rename from SGO/sgo/verbs/wasMaidOfHonorFor.ttl rename to SGO/ogit/verbs/wasMaidOfHonorFor.ttl diff --git a/SGO/sgo/verbs/wasOfficiantFor.ttl b/SGO/ogit/verbs/wasOfficiantFor.ttl similarity index 100% rename from SGO/sgo/verbs/wasOfficiantFor.ttl rename to SGO/ogit/verbs/wasOfficiantFor.ttl diff --git a/SGO/sgo/verbs/wasWeddingWitnessFor.ttl b/SGO/ogit/verbs/wasWeddingWitnessFor.ttl similarity index 100% rename from SGO/sgo/verbs/wasWeddingWitnessFor.ttl rename to SGO/ogit/verbs/wasWeddingWitnessFor.ttl diff --git a/SGO/sgo/verbs/whollyOwnedSubsidiaryOf.ttl b/SGO/ogit/verbs/whollyOwnedSubsidiaryOf.ttl similarity index 100% rename from SGO/sgo/verbs/whollyOwnedSubsidiaryOf.ttl rename to SGO/ogit/verbs/whollyOwnedSubsidiaryOf.ttl diff --git a/SGO/sgo/verbs/wins.ttl b/SGO/ogit/verbs/wins.ttl similarity index 100% rename from SGO/sgo/verbs/wins.ttl rename to SGO/ogit/verbs/wins.ttl diff --git a/SGO/sgo/verbs/worksOn.ttl b/SGO/ogit/verbs/worksOn.ttl similarity index 100% rename from SGO/sgo/verbs/worksOn.ttl rename to SGO/ogit/verbs/worksOn.ttl diff --git a/SGO/sgo/README.md b/SGO/sgo/README.md deleted file mode 100644 index 95e7ebc78b..0000000000 --- a/SGO/sgo/README.md +++ /dev/null @@ -1,10 +0,0 @@ -### Overview - -This directory contains the following things: - -* `attributes`: The definitions of OGIT attributes -* `entities`: The definitions of OGIT attributes -* `verbs`: The definitions of OGIT attributes - -Please refer to the [OGIT ontology details](https://github.com/almatoai/OGIT/wiki/OGIT-ontology-details) wiki page for an explanation of these concepts. - diff --git a/validate.sh b/validate.sh index e40d42de99..949b90523f 100755 --- a/validate.sh +++ b/validate.sh @@ -14,7 +14,7 @@ # such a run prints two `Count of errors:` summary blocks (e.g. 2943 # and 312) full of "doesn't exist!" errors against ogit:name, # ogit:Node, ogit:generates, ogit:Timeseries, ogit:Location etc. -- -# all of which are correctly defined in SGO/sgo/. +# all of which are correctly defined in SGO/ogit/. # # Note: passing the repo root as a directory argument # (`java -jar bin/ogit-validator.jar .`) is NOT a usable fix even From 050768140c1dfdd4ed305222d6a0fcfd9790bc65 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 28 Oct 2026 02:26:35 +0000 Subject: [PATCH 11/16] Let by_branch compile on current Rust impl Iterator returned from by_branch captures the borrowed branch argument, which current rustc rejects (E0700). Adding + '_ states that capture and still builds on the crate's rust-version, 1.70. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMPWTwovjYJEUMuGPb4 --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 5df0ee2cb1..d28d8770ea 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -64,7 +64,7 @@ include!(concat!(env!("OUT_DIR"), "/ttls.rs")); /// /// Note: this is a linear scan (`ALL_TTLS.len()` ~ 1500). For hot paths /// the consumer's own build.rs should generate a perfect-hash table. -pub fn by_branch(branch: &str) -> impl Iterator { +pub fn by_branch(branch: &str) -> impl Iterator + '_ { ALL_TTLS.iter().filter(move |t| t.branch == branch) } From cc4bd3e599aabf65b6e2c15ea93b0522fe4adbf5 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 28 Oct 2026 02:30:24 +0000 Subject: [PATCH 12/16] Move the Healthcare enumeration classes into entities/ Since they are now subclasses of ogit:Entity, OGAR's reader (which takes entities from entities/ directories) and lance-graph-ontology's reader (which takes direct subclasses of ogit:Entity) only agree on them when they sit with the other entities. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMPWTwovjYJEUMuGPb4 --- NTO/Healthcare/{enumerations => entities}/combo_addtreatment.ttl | 0 .../{enumerations => entities}/combo_medication_dailydose.ttl | 0 .../{enumerations => entities}/combo_medication_dose_unit.ttl | 0 .../{enumerations => entities}/combo_medication_interval.ttl | 0 .../{enumerations => entities}/combo_medication_stop_reason.ttl | 0 .../{enumerations => entities}/combo_medication_typ.ttl | 0 NTO/Healthcare/{enumerations => entities}/combo_spez.ttl | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename NTO/Healthcare/{enumerations => entities}/combo_addtreatment.ttl (100%) rename NTO/Healthcare/{enumerations => entities}/combo_medication_dailydose.ttl (100%) rename NTO/Healthcare/{enumerations => entities}/combo_medication_dose_unit.ttl (100%) rename NTO/Healthcare/{enumerations => entities}/combo_medication_interval.ttl (100%) rename NTO/Healthcare/{enumerations => entities}/combo_medication_stop_reason.ttl (100%) rename NTO/Healthcare/{enumerations => entities}/combo_medication_typ.ttl (100%) rename NTO/Healthcare/{enumerations => entities}/combo_spez.ttl (100%) diff --git a/NTO/Healthcare/enumerations/combo_addtreatment.ttl b/NTO/Healthcare/entities/combo_addtreatment.ttl similarity index 100% rename from NTO/Healthcare/enumerations/combo_addtreatment.ttl rename to NTO/Healthcare/entities/combo_addtreatment.ttl diff --git a/NTO/Healthcare/enumerations/combo_medication_dailydose.ttl b/NTO/Healthcare/entities/combo_medication_dailydose.ttl similarity index 100% rename from NTO/Healthcare/enumerations/combo_medication_dailydose.ttl rename to NTO/Healthcare/entities/combo_medication_dailydose.ttl diff --git a/NTO/Healthcare/enumerations/combo_medication_dose_unit.ttl b/NTO/Healthcare/entities/combo_medication_dose_unit.ttl similarity index 100% rename from NTO/Healthcare/enumerations/combo_medication_dose_unit.ttl rename to NTO/Healthcare/entities/combo_medication_dose_unit.ttl diff --git a/NTO/Healthcare/enumerations/combo_medication_interval.ttl b/NTO/Healthcare/entities/combo_medication_interval.ttl similarity index 100% rename from NTO/Healthcare/enumerations/combo_medication_interval.ttl rename to NTO/Healthcare/entities/combo_medication_interval.ttl diff --git a/NTO/Healthcare/enumerations/combo_medication_stop_reason.ttl b/NTO/Healthcare/entities/combo_medication_stop_reason.ttl similarity index 100% rename from NTO/Healthcare/enumerations/combo_medication_stop_reason.ttl rename to NTO/Healthcare/entities/combo_medication_stop_reason.ttl diff --git a/NTO/Healthcare/enumerations/combo_medication_typ.ttl b/NTO/Healthcare/entities/combo_medication_typ.ttl similarity index 100% rename from NTO/Healthcare/enumerations/combo_medication_typ.ttl rename to NTO/Healthcare/entities/combo_medication_typ.ttl diff --git a/NTO/Healthcare/enumerations/combo_spez.ttl b/NTO/Healthcare/entities/combo_spez.ttl similarity index 100% rename from NTO/Healthcare/enumerations/combo_spez.ttl rename to NTO/Healthcare/entities/combo_spez.ttl From 1a32f64cb89d2cc693b8049e8e4474b5048777f9 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 28 Oct 2026 02:46:40 +0000 Subject: [PATCH 13/16] Restore the SGO/sgo and SGO/core layout The validator's directory check matches against the file's canonical path, not the path relative to the repository. A root-namespace file such as SGO/sgo/entities/Node.ttl needs `/ogit/` somewhere in that path, and a checkout named OGIT (as on GitHub CI, /home/runner/work/OGIT/OGIT) provides it. The move to SGO/ogit was based on a run in a checkout with a different directory name; with the original layout, a checkout named OGIT validates successfully. This reverts commit 7725f7315. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMPWTwovjYJEUMuGPb4 --- NTO/GFS/README.md | 2 +- NTO/HR/README.md | 2 +- SGO/README.md | 4 +++- SGO/{ogit => }/core/attributes/_c-id.ttl | 0 SGO/{ogit => }/core/attributes/_content.ttl | 0 SGO/{ogit => }/core/attributes/_created-on.ttl | 0 SGO/{ogit => }/core/attributes/_creator-app.ttl | 0 SGO/{ogit => }/core/attributes/_creator.ttl | 0 .../core/attributes/_deleted-by-app.ttl | 0 SGO/{ogit => }/core/attributes/_deleted-by.ttl | 0 SGO/{ogit => }/core/attributes/_deleted-on.ttl | 0 SGO/{ogit => }/core/attributes/_edge-id.ttl | 0 SGO/{ogit => }/core/attributes/_graphtype.ttl | 0 SGO/{ogit => }/core/attributes/_id.ttl | 0 SGO/{ogit => }/core/attributes/_is-deleted.ttl | 0 .../core/attributes/_modified-by-app.ttl | 0 SGO/{ogit => }/core/attributes/_modified-by.ttl | 0 SGO/{ogit => }/core/attributes/_modified-on.ttl | 0 SGO/{ogit => }/core/attributes/_organization.ttl | 0 SGO/{ogit => }/core/attributes/_owner.ttl | 0 SGO/{ogit => }/core/attributes/_reader.ttl | 0 SGO/{ogit => }/core/attributes/_scope.ttl | 0 SGO/{ogit => }/core/attributes/_source.ttl | 0 SGO/{ogit => }/core/attributes/_tags.ttl | 0 SGO/{ogit => }/core/attributes/_type.ttl | 0 SGO/{ogit => }/core/attributes/_v-id.ttl | 0 SGO/{ogit => }/core/attributes/_v.ttl | 0 SGO/{ogit => }/core/attributes/_version.ttl | 0 SGO/{ogit => }/core/attributes/_xid.ttl | 0 SGO/{ogit => }/core/entities/Node.ttl | 0 SGO/ogit/README.md | 15 +-------------- SGO/sgo/README.md | 10 ++++++++++ SGO/{ogit => sgo}/attributes/BatteryState.ttl | 0 SGO/{ogit => sgo}/attributes/accessControl.ttl | 0 SGO/{ogit => sgo}/attributes/acknowledgeState.ttl | 0 SGO/{ogit => sgo}/attributes/addressLocality.ttl | 0 SGO/{ogit => sgo}/attributes/alias.ttl | 0 SGO/{ogit => sgo}/attributes/alternativeName.ttl | 0 SGO/{ogit => sgo}/attributes/altitude.ttl | 0 SGO/{ogit => sgo}/attributes/amount.ttl | 0 SGO/{ogit => sgo}/attributes/area.ttl | 0 SGO/{ogit => sgo}/attributes/asset.ttl | 0 SGO/{ogit => sgo}/attributes/assetTag.ttl | 0 SGO/{ogit => sgo}/attributes/assignedAt.ttl | 0 SGO/{ogit => sgo}/attributes/assignedGroup.ttl | 0 SGO/{ogit => sgo}/attributes/attachmentID.ttl | 0 SGO/{ogit => sgo}/attributes/author.ttl | 0 SGO/{ogit => sgo}/attributes/availability.ttl | 0 SGO/{ogit => sgo}/attributes/birthplace.ttl | 0 SGO/{ogit => sgo}/attributes/brand.ttl | 0 SGO/{ogit => sgo}/attributes/buildingId.ttl | 0 SGO/{ogit => sgo}/attributes/businessCategory.ttl | 0 .../attributes/businessCriticality.ttl | 0 SGO/{ogit => sgo}/attributes/capacity.ttl | 0 .../attributes/capacityAvailable.ttl | 0 SGO/{ogit => sgo}/attributes/category.ttl | 0 SGO/{ogit => sgo}/attributes/certainty.ttl | 0 SGO/{ogit => sgo}/attributes/changeLog.ttl | 0 SGO/{ogit => sgo}/attributes/checkedInAt.ttl | 0 SGO/{ogit => sgo}/attributes/checkedOutAt.ttl | 0 SGO/{ogit => sgo}/attributes/ciType.ttl | 0 SGO/{ogit => sgo}/attributes/city.ttl | 0 SGO/{ogit => sgo}/attributes/class.ttl | 0 SGO/{ogit => sgo}/attributes/classification.ttl | 0 SGO/{ogit => sgo}/attributes/cleanContent.ttl | 0 SGO/{ogit => sgo}/attributes/closedAt.ttl | 0 SGO/{ogit => sgo}/attributes/codeType.ttl | 0 SGO/{ogit => sgo}/attributes/color.ttl | 0 SGO/{ogit => sgo}/attributes/comment.ttl | 0 SGO/{ogit => sgo}/attributes/condition.ttl | 0 SGO/{ogit => sgo}/attributes/confidence.ttl | 0 SGO/{ogit => sgo}/attributes/confidentiality.ttl | 0 SGO/{ogit => sgo}/attributes/connectorId.ttl | 0 SGO/{ogit => sgo}/attributes/consentLevel.ttl | 0 SGO/{ogit => sgo}/attributes/contact.ttl | 0 SGO/{ogit => sgo}/attributes/content.ttl | 0 SGO/{ogit => sgo}/attributes/coordinate.ttl | 0 SGO/{ogit => sgo}/attributes/country.ttl | 0 SGO/{ogit => sgo}/attributes/createdAt.ttl | 0 SGO/{ogit => sgo}/attributes/createdBy.ttl | 0 SGO/{ogit => sgo}/attributes/creationTime.ttl | 0 SGO/{ogit => sgo}/attributes/creator.ttl | 0 SGO/{ogit => sgo}/attributes/currency.ttl | 0 SGO/{ogit => sgo}/attributes/dateOfBirth.ttl | 0 SGO/{ogit => sgo}/attributes/dateOfDeath.ttl | 0 SGO/{ogit => sgo}/attributes/dayOfWeek.ttl | 0 SGO/{ogit => sgo}/attributes/deadline.ttl | 0 SGO/{ogit => sgo}/attributes/deliveredAt.ttl | 0 SGO/{ogit => sgo}/attributes/description.ttl | 0 SGO/{ogit => sgo}/attributes/duration.ttl | 0 SGO/{ogit => sgo}/attributes/durationUnit.ttl | 0 SGO/{ogit => sgo}/attributes/effort.ttl | 0 SGO/{ogit => sgo}/attributes/email.ttl | 0 SGO/{ogit => sgo}/attributes/endOfWarranty.ttl | 0 SGO/{ogit => sgo}/attributes/endedAt.ttl | 0 SGO/{ogit => sgo}/attributes/enumValues.ttl | 0 SGO/{ogit => sgo}/attributes/expirationDate.ttl | 0 SGO/{ogit => sgo}/attributes/expiresAt.ttl | 0 SGO/{ogit => sgo}/attributes/externalId.ttl | 0 SGO/{ogit => sgo}/attributes/faultCount.ttl | 0 SGO/{ogit => sgo}/attributes/favorite.ttl | 0 SGO/{ogit => sgo}/attributes/fax.ttl | 0 SGO/{ogit => sgo}/attributes/finishedAt.ttl | 0 SGO/{ogit => sgo}/attributes/firstName.ttl | 0 SGO/{ogit => sgo}/attributes/firstOccurredAt.ttl | 0 SGO/{ogit => sgo}/attributes/followers.ttl | 0 SGO/{ogit => sgo}/attributes/foundingDate.ttl | 0 SGO/{ogit => sgo}/attributes/frequency.ttl | 0 SGO/{ogit => sgo}/attributes/function.ttl | 0 SGO/{ogit => sgo}/attributes/gender.ttl | 0 SGO/{ogit => sgo}/attributes/id.ttl | 0 SGO/{ogit => sgo}/attributes/identifierCode.ttl | 0 SGO/{ogit => sgo}/attributes/impact.ttl | 0 SGO/{ogit => sgo}/attributes/information.ttl | 0 SGO/{ogit => sgo}/attributes/installStatus.ttl | 0 SGO/{ogit => sgo}/attributes/installedAt.ttl | 0 SGO/{ogit => sgo}/attributes/instance.ttl | 0 SGO/{ogit => sgo}/attributes/integrity.ttl | 0 SGO/{ogit => sgo}/attributes/inventoryNumber.ttl | 0 SGO/{ogit => sgo}/attributes/invoiceNumber.ttl | 0 SGO/{ogit => sgo}/attributes/ipAddress.ttl | 0 SGO/{ogit => sgo}/attributes/isCritical.ttl | 0 SGO/{ogit => sgo}/attributes/isInternal.ttl | 0 SGO/{ogit => sgo}/attributes/isMutable.ttl | 0 SGO/{ogit => sgo}/attributes/isPermanent.ttl | 0 SGO/{ogit => sgo}/attributes/isRoot.ttl | 0 SGO/{ogit => sgo}/attributes/isSupported.ttl | 0 SGO/{ogit => sgo}/attributes/isValid.ttl | 0 SGO/{ogit => sgo}/attributes/justification.ttl | 0 SGO/{ogit => sgo}/attributes/language.ttl | 0 SGO/{ogit => sgo}/attributes/lastClearedAt.ttl | 0 SGO/{ogit => sgo}/attributes/lastName.ttl | 0 SGO/{ogit => sgo}/attributes/lastOccurredAt.ttl | 0 SGO/{ogit => sgo}/attributes/lastScannedAt.ttl | 0 SGO/{ogit => sgo}/attributes/lastUpdatedAt.ttl | 0 SGO/{ogit => sgo}/attributes/lastUpdatedBy.ttl | 0 SGO/{ogit => sgo}/attributes/latestVersion.ttl | 0 SGO/{ogit => sgo}/attributes/latitude.ttl | 0 SGO/{ogit => sgo}/attributes/leaseContract.ttl | 0 .../attributes/lengthOfReportingPeriod.ttl | 0 SGO/{ogit => sgo}/attributes/licenseId.ttl | 0 SGO/{ogit => sgo}/attributes/licenseKey.ttl | 0 .../attributes/licenseRequestStatus.ttl | 0 SGO/{ogit => sgo}/attributes/licenseSubject.ttl | 0 SGO/{ogit => sgo}/attributes/licenseType.ttl | 0 .../attributes/locationAcquisitionTime.ttl | 0 .../attributes/locationPrecision.ttl | 0 SGO/{ogit => sgo}/attributes/locked.ttl | 0 SGO/{ogit => sgo}/attributes/longitude.ttl | 0 SGO/{ogit => sgo}/attributes/lowerLimit.ttl | 0 SGO/{ogit => sgo}/attributes/macAddress.ttl | 0 SGO/{ogit => sgo}/attributes/maintenanceState.ttl | 0 SGO/{ogit => sgo}/attributes/manufacturer.ttl | 0 SGO/{ogit => sgo}/attributes/market.ttl | 0 SGO/{ogit => sgo}/attributes/message.ttl | 0 SGO/{ogit => sgo}/attributes/middleName.ttl | 0 SGO/{ogit => sgo}/attributes/mimeType.ttl | 0 SGO/{ogit => sgo}/attributes/mobilePhone.ttl | 0 SGO/{ogit => sgo}/attributes/mode.ttl | 0 SGO/{ogit => sgo}/attributes/model.ttl | 0 SGO/{ogit => sgo}/attributes/modelNumber.ttl | 0 SGO/{ogit => sgo}/attributes/modificationTime.ttl | 0 SGO/{ogit => sgo}/attributes/name.ttl | 0 SGO/{ogit => sgo}/attributes/negativeScore.ttl | 0 SGO/{ogit => sgo}/attributes/notification.ttl | 0 SGO/{ogit => sgo}/attributes/numberOfChildren.ttl | 0 SGO/{ogit => sgo}/attributes/occurenceCount.ttl | 0 SGO/{ogit => sgo}/attributes/officePhone.ttl | 0 SGO/{ogit => sgo}/attributes/onAttribute.ttl | 0 SGO/{ogit => sgo}/attributes/onVertex.ttl | 0 SGO/{ogit => sgo}/attributes/openedAt.ttl | 0 SGO/{ogit => sgo}/attributes/operation.ttl | 0 .../attributes/operationalStatus.ttl | 0 SGO/{ogit => sgo}/attributes/orderedAt.ttl | 0 SGO/{ogit => sgo}/attributes/otherPhone.ttl | 0 SGO/{ogit => sgo}/attributes/parentId.ttl | 0 SGO/{ogit => sgo}/attributes/passportNumber.ttl | 0 SGO/{ogit => sgo}/attributes/pendingChange.ttl | 0 SGO/{ogit => sgo}/attributes/phone.ttl | 0 SGO/{ogit => sgo}/attributes/placement.ttl | 0 .../attributes/plannedFinishDate.ttl | 0 SGO/{ogit => sgo}/attributes/plannedStartDate.ttl | 0 SGO/{ogit => sgo}/attributes/polarity.ttl | 0 SGO/{ogit => sgo}/attributes/position.ttl | 0 SGO/{ogit => sgo}/attributes/positionNumber.ttl | 0 SGO/{ogit => sgo}/attributes/positiveScore.ttl | 0 SGO/{ogit => sgo}/attributes/postalCode.ttl | 0 SGO/{ogit => sgo}/attributes/powerConsumption.ttl | 0 SGO/{ogit => sgo}/attributes/priority.ttl | 0 .../attributes/productOrderNumber.ttl | 0 SGO/{ogit => sgo}/attributes/profession.ttl | 0 SGO/{ogit => sgo}/attributes/project.ttl | 0 SGO/{ogit => sgo}/attributes/public.ttl | 0 SGO/{ogit => sgo}/attributes/publishedAt.ttl | 0 SGO/{ogit => sgo}/attributes/purchaseDate.ttl | 0 SGO/{ogit => sgo}/attributes/purchasedAt.ttl | 0 SGO/{ogit => sgo}/attributes/question.ttl | 0 SGO/{ogit => sgo}/attributes/range.ttl | 0 SGO/{ogit => sgo}/attributes/rank.ttl | 0 SGO/{ogit => sgo}/attributes/reason.ttl | 0 SGO/{ogit => sgo}/attributes/recipients.ttl | 0 SGO/{ogit => sgo}/attributes/religion.ttl | 0 SGO/{ogit => sgo}/attributes/reportedAt.ttl | 0 SGO/{ogit => sgo}/attributes/reportedBy.ttl | 0 SGO/{ogit => sgo}/attributes/resource.ttl | 0 SGO/{ogit => sgo}/attributes/response.ttl | 0 SGO/{ogit => sgo}/attributes/reviewedAt.ttl | 0 SGO/{ogit => sgo}/attributes/reviewedBy.ttl | 0 SGO/{ogit => sgo}/attributes/revision.ttl | 0 SGO/{ogit => sgo}/attributes/revokedAt.ttl | 0 SGO/{ogit => sgo}/attributes/risk.ttl | 0 SGO/{ogit => sgo}/attributes/schedule.ttl | 0 SGO/{ogit => sgo}/attributes/section.ttl | 0 SGO/{ogit => sgo}/attributes/securityClass.ttl | 0 SGO/{ogit => sgo}/attributes/serialNumber.ttl | 0 SGO/{ogit => sgo}/attributes/serviceContract.ttl | 0 SGO/{ogit => sgo}/attributes/severity.ttl | 0 SGO/{ogit => sgo}/attributes/sharedWith.ttl | 0 SGO/{ogit => sgo}/attributes/shortDescription.ttl | 0 SGO/{ogit => sgo}/attributes/size.ttl | 0 SGO/{ogit => sgo}/attributes/source.ttl | 0 SGO/{ogit => sgo}/attributes/sourceId.ttl | 0 SGO/{ogit => sgo}/attributes/sourceTable.ttl | 0 SGO/{ogit => sgo}/attributes/soxClass.ttl | 0 SGO/{ogit => sgo}/attributes/startOfWarranty.ttl | 0 SGO/{ogit => sgo}/attributes/startedAt.ttl | 0 SGO/{ogit => sgo}/attributes/status.ttl | 0 SGO/{ogit => sgo}/attributes/streetAddress.ttl | 0 SGO/{ogit => sgo}/attributes/subCategory.ttl | 0 SGO/{ogit => sgo}/attributes/subType.ttl | 0 SGO/{ogit => sgo}/attributes/subject.ttl | 0 SGO/{ogit => sgo}/attributes/summary.ttl | 0 SGO/{ogit => sgo}/attributes/synonyms.ttl | 0 SGO/{ogit => sgo}/attributes/tags.ttl | 0 SGO/{ogit => sgo}/attributes/taskLog.ttl | 0 SGO/{ogit => sgo}/attributes/tenantId.ttl | 0 SGO/{ogit => sgo}/attributes/timeZone.ttl | 0 SGO/{ogit => sgo}/attributes/timestamp.ttl | 0 SGO/{ogit => sgo}/attributes/title.ttl | 0 SGO/{ogit => sgo}/attributes/token.ttl | 0 SGO/{ogit => sgo}/attributes/tone.ttl | 0 SGO/{ogit => sgo}/attributes/type.ttl | 0 SGO/{ogit => sgo}/attributes/unit.ttl | 0 SGO/{ogit => sgo}/attributes/unitDescription.ttl | 0 SGO/{ogit => sgo}/attributes/updateCount.ttl | 0 SGO/{ogit => sgo}/attributes/upperLimit.ttl | 0 SGO/{ogit => sgo}/attributes/urgency.ttl | 0 SGO/{ogit => sgo}/attributes/uri.ttl | 0 SGO/{ogit => sgo}/attributes/url.ttl | 0 SGO/{ogit => sgo}/attributes/validFrom.ttl | 0 SGO/{ogit => sgo}/attributes/validTo.ttl | 0 SGO/{ogit => sgo}/attributes/value.ttl | 0 SGO/{ogit => sgo}/attributes/valueDate.ttl | 0 SGO/{ogit => sgo}/attributes/values.ttl | 0 SGO/{ogit => sgo}/attributes/vendor.ttl | 0 SGO/{ogit => sgo}/attributes/version.ttl | 0 SGO/{ogit => sgo}/attributes/webPage.ttl | 0 SGO/{ogit => sgo}/attributes/weight.ttl | 0 SGO/{ogit => sgo}/attributes/yearOfBirth.ttl | 0 SGO/{ogit => sgo}/attributes/zipCode.ttl | 0 SGO/{ogit => sgo}/entities/Account.ttl | 0 SGO/{ogit => sgo}/entities/Agent.ttl | 0 SGO/{ogit => sgo}/entities/Alert.ttl | 0 SGO/{ogit => sgo}/entities/Annotation.ttl | 0 SGO/{ogit => sgo}/entities/Asset.ttl | 0 SGO/{ogit => sgo}/entities/Attachment.ttl | 0 SGO/{ogit => sgo}/entities/Blob.ttl | 0 SGO/{ogit => sgo}/entities/Catalog.ttl | 0 SGO/{ogit => sgo}/entities/CatalogItem.ttl | 0 SGO/{ogit => sgo}/entities/Category.ttl | 0 SGO/{ogit => sgo}/entities/Certificate.ttl | 0 SGO/{ogit => sgo}/entities/Comment.ttl | 0 SGO/{ogit => sgo}/entities/Configuration.ttl | 0 SGO/{ogit => sgo}/entities/ConfigurationItem.ttl | 0 SGO/{ogit => sgo}/entities/Contract.ttl | 0 SGO/{ogit => sgo}/entities/Course.ttl | 0 .../entities/CustomApplicationData.ttl | 0 SGO/{ogit => sgo}/entities/Device.ttl | 0 SGO/{ogit => sgo}/entities/Email.ttl | 0 SGO/{ogit => sgo}/entities/Environment.ttl | 0 SGO/{ogit => sgo}/entities/Equivalence.ttl | 0 SGO/{ogit => sgo}/entities/Event.ttl | 0 SGO/{ogit => sgo}/entities/Feature.ttl | 0 SGO/{ogit => sgo}/entities/Hyperedge.ttl | 0 SGO/{ogit => sgo}/entities/Hyperlink.ttl | 0 SGO/{ogit => sgo}/entities/Installation.ttl | 0 SGO/{ogit => sgo}/entities/Intent.ttl | 0 SGO/{ogit => sgo}/entities/Keyword.ttl | 0 SGO/{ogit => sgo}/entities/License.ttl | 0 SGO/{ogit => sgo}/entities/LicenseRequest.ttl | 0 SGO/{ogit => sgo}/entities/LicenseToken.ttl | 0 SGO/{ogit => sgo}/entities/Location.ttl | 0 SGO/{ogit => sgo}/entities/Note.ttl | 0 SGO/{ogit => sgo}/entities/Notification.ttl | 0 SGO/{ogit => sgo}/entities/Offer.ttl | 0 SGO/{ogit => sgo}/entities/Organization.ttl | 0 SGO/{ogit => sgo}/entities/Parameter.ttl | 0 SGO/{ogit => sgo}/entities/ParameterType.ttl | 0 SGO/{ogit => sgo}/entities/Penalty.ttl | 0 SGO/{ogit => sgo}/entities/Person.ttl | 0 SGO/{ogit => sgo}/entities/Policy.ttl | 0 SGO/{ogit => sgo}/entities/Product.ttl | 0 SGO/{ogit => sgo}/entities/Question.ttl | 0 SGO/{ogit => sgo}/entities/Rating.ttl | 0 SGO/{ogit => sgo}/entities/Region.ttl | 0 SGO/{ogit => sgo}/entities/Relevance.ttl | 0 SGO/{ogit => sgo}/entities/ReportedStatistic.ttl | 0 SGO/{ogit => sgo}/entities/Requirements.ttl | 0 SGO/{ogit => sgo}/entities/Role.ttl | 0 SGO/{ogit => sgo}/entities/RoleAssignment.ttl | 0 SGO/{ogit => sgo}/entities/Schema.ttl | 0 SGO/{ogit => sgo}/entities/Series.ttl | 0 SGO/{ogit => sgo}/entities/Status.ttl | 0 SGO/{ogit => sgo}/entities/Subscription.ttl | 0 SGO/{ogit => sgo}/entities/Tag.ttl | 0 SGO/{ogit => sgo}/entities/Task.ttl | 0 SGO/{ogit => sgo}/entities/TaskList.ttl | 0 SGO/{ogit => sgo}/entities/TermsAndConditions.ttl | 0 SGO/{ogit => sgo}/entities/Timeseries.ttl | 0 SGO/{ogit => sgo}/entities/Tone.ttl | 0 SGO/{ogit => sgo}/entities/Vcard.ttl | 0 SGO/{ogit => sgo}/entities/VersioningData.ttl | 0 SGO/{ogit => sgo}/verbs/accepts.ttl | 0 SGO/{ogit => sgo}/verbs/activates.ttl | 0 SGO/{ogit => sgo}/verbs/actsOnBehalfOf.ttl | 0 .../verbs/administratorInInsolvencyOf.ttl | 0 SGO/{ogit => sgo}/verbs/administratorOf.ttl | 0 SGO/{ogit => sgo}/verbs/affects.ttl | 0 SGO/{ogit => sgo}/verbs/affiliateOf.ttl | 0 SGO/{ogit => sgo}/verbs/alerts.ttl | 0 SGO/{ogit => sgo}/verbs/approves.ttl | 0 SGO/{ogit => sgo}/verbs/assignedTo.ttl | 0 SGO/{ogit => sgo}/verbs/associates.ttl | 0 SGO/{ogit => sgo}/verbs/assumes.ttl | 0 .../verbs/auditCommitteeMemberOf.ttl | 0 SGO/{ogit => sgo}/verbs/auditorOf.ttl | 0 SGO/{ogit => sgo}/verbs/availableIn.ttl | 0 SGO/{ogit => sgo}/verbs/belongs.ttl | 0 SGO/{ogit => sgo}/verbs/beneficialOwnerOf.ttl | 0 SGO/{ogit => sgo}/verbs/beneficiaryOf.ttl | 0 SGO/{ogit => sgo}/verbs/bills.ttl | 0 SGO/{ogit => sgo}/verbs/boardMemberOf.ttl | 0 SGO/{ogit => sgo}/verbs/bornIn.ttl | 0 SGO/{ogit => sgo}/verbs/calls.ttl | 0 SGO/{ogit => sgo}/verbs/capitalOf.ttl | 0 SGO/{ogit => sgo}/verbs/causes.ttl | 0 SGO/{ogit => sgo}/verbs/centerOf.ttl | 0 SGO/{ogit => sgo}/verbs/chairmanOf.ttl | 0 SGO/{ogit => sgo}/verbs/closes.ttl | 0 SGO/{ogit => sgo}/verbs/closest.ttl | 0 SGO/{ogit => sgo}/verbs/communicatesWith.ttl | 0 SGO/{ogit => sgo}/verbs/competes.ttl | 0 SGO/{ogit => sgo}/verbs/complianceOfficerOf.ttl | 0 SGO/{ogit => sgo}/verbs/complies.ttl | 0 SGO/{ogit => sgo}/verbs/concludes.ttl | 0 SGO/{ogit => sgo}/verbs/conducts.ttl | 0 SGO/{ogit => sgo}/verbs/configures.ttl | 0 SGO/{ogit => sgo}/verbs/conformsTo.ttl | 0 SGO/{ogit => sgo}/verbs/connects.ttl | 0 SGO/{ogit => sgo}/verbs/consistsOf.ttl | 0 SGO/{ogit => sgo}/verbs/consumes.ttl | 0 SGO/{ogit => sgo}/verbs/contains.ttl | 0 SGO/{ogit => sgo}/verbs/contractsFor.ttl | 0 SGO/{ogit => sgo}/verbs/contributes.ttl | 0 SGO/{ogit => sgo}/verbs/controlledBy.ttl | 0 SGO/{ogit => sgo}/verbs/corresponds.ttl | 0 SGO/{ogit => sgo}/verbs/covers.ttl | 0 SGO/{ogit => sgo}/verbs/creates.ttl | 0 SGO/{ogit => sgo}/verbs/custodianOf.ttl | 0 SGO/{ogit => sgo}/verbs/defines.ttl | 0 SGO/{ogit => sgo}/verbs/deliversTo.ttl | 0 SGO/{ogit => sgo}/verbs/dependsOn.ttl | 0 SGO/{ogit => sgo}/verbs/deployedTo.ttl | 0 SGO/{ogit => sgo}/verbs/derivesFrom.ttl | 0 SGO/{ogit => sgo}/verbs/describes.ttl | 0 SGO/{ogit => sgo}/verbs/desires.ttl | 0 SGO/{ogit => sgo}/verbs/directorOf.ttl | 0 SGO/{ogit => sgo}/verbs/dislikes.ttl | 0 SGO/{ogit => sgo}/verbs/employs.ttl | 0 SGO/{ogit => sgo}/verbs/endorses.ttl | 0 SGO/{ogit => sgo}/verbs/executorOf.ttl | 0 SGO/{ogit => sgo}/verbs/extends.ttl | 0 SGO/{ogit => sgo}/verbs/follows.ttl | 0 SGO/{ogit => sgo}/verbs/forks.ttl | 0 SGO/{ogit => sgo}/verbs/generatedFrom.ttl | 0 SGO/{ogit => sgo}/verbs/generates.ttl | 0 SGO/{ogit => sgo}/verbs/governs.ttl | 0 SGO/{ogit => sgo}/verbs/has.ttl | 0 SGO/{ogit => sgo}/verbs/hasChild.ttl | 0 SGO/{ogit => sgo}/verbs/hasCousin.ttl | 0 SGO/{ogit => sgo}/verbs/hasFormerSpouse.ttl | 0 SGO/{ogit => sgo}/verbs/hasGrandchild.ttl | 0 SGO/{ogit => sgo}/verbs/hasGrandparent.ttl | 0 SGO/{ogit => sgo}/verbs/hasGuardian.ttl | 0 SGO/{ogit => sgo}/verbs/hasInLaw.ttl | 0 SGO/{ogit => sgo}/verbs/hasNationality.ttl | 0 SGO/{ogit => sgo}/verbs/hasNieceNephew.ttl | 0 SGO/{ogit => sgo}/verbs/hasParent.ttl | 0 SGO/{ogit => sgo}/verbs/hasSibling.ttl | 0 SGO/{ogit => sgo}/verbs/hasSpouse.ttl | 0 SGO/{ogit => sgo}/verbs/hasUncleAunt.ttl | 0 SGO/{ogit => sgo}/verbs/heirOf.ttl | 0 SGO/{ogit => sgo}/verbs/hiddenBy.ttl | 0 SGO/{ogit => sgo}/verbs/holds.ttl | 0 SGO/{ogit => sgo}/verbs/hosts.ttl | 0 SGO/{ogit => sgo}/verbs/ignores.ttl | 0 SGO/{ogit => sgo}/verbs/implements.ttl | 0 SGO/{ogit => sgo}/verbs/includes.ttl | 0 SGO/{ogit => sgo}/verbs/installs.ttl | 0 SGO/{ogit => sgo}/verbs/investmentManagerOf.ttl | 0 SGO/{ogit => sgo}/verbs/invites.ttl | 0 SGO/{ogit => sgo}/verbs/isEntitledTo.ttl | 0 SGO/{ogit => sgo}/verbs/isMemberOf.ttl | 0 SGO/{ogit => sgo}/verbs/isPartOf.ttl | 0 SGO/{ogit => sgo}/verbs/isPresent.ttl | 0 SGO/{ogit => sgo}/verbs/isResponsibleFor.ttl | 0 SGO/{ogit => sgo}/verbs/issues.ttl | 0 SGO/{ogit => sgo}/verbs/leads.ttl | 0 SGO/{ogit => sgo}/verbs/likes.ttl | 0 SGO/{ogit => sgo}/verbs/liquidatorOf.ttl | 0 SGO/{ogit => sgo}/verbs/listedAt.ttl | 0 SGO/{ogit => sgo}/verbs/lobbyistFor.ttl | 0 SGO/{ogit => sgo}/verbs/locatedAt.ttl | 0 SGO/{ogit => sgo}/verbs/locatedIn.ttl | 0 SGO/{ogit => sgo}/verbs/madeOf.ttl | 0 SGO/{ogit => sgo}/verbs/manages.ttl | 0 SGO/{ogit => sgo}/verbs/mergedWith.ttl | 0 SGO/{ogit => sgo}/verbs/moderates.ttl | 0 SGO/{ogit => sgo}/verbs/nomineeFor.ttl | 0 SGO/{ogit => sgo}/verbs/officerOf.ttl | 0 SGO/{ogit => sgo}/verbs/opens.ttl | 0 SGO/{ogit => sgo}/verbs/organizes.ttl | 0 SGO/{ogit => sgo}/verbs/originatesIn.ttl | 0 SGO/{ogit => sgo}/verbs/overrides.ttl | 0 SGO/{ogit => sgo}/verbs/owns.ttl | 0 SGO/{ogit => sgo}/verbs/partneredWith.ttl | 0 SGO/{ogit => sgo}/verbs/performs.ttl | 0 SGO/{ogit => sgo}/verbs/plans.ttl | 0 SGO/{ogit => sgo}/verbs/precedes.ttl | 0 SGO/{ogit => sgo}/verbs/prioritizes.ttl | 0 SGO/{ogit => sgo}/verbs/produces.ttl | 0 SGO/{ogit => sgo}/verbs/protectorOf.ttl | 0 SGO/{ogit => sgo}/verbs/proves.ttl | 0 SGO/{ogit => sgo}/verbs/provides.ttl | 0 SGO/{ogit => sgo}/verbs/providesServicesTo.ttl | 0 SGO/{ogit => sgo}/verbs/publishes.ttl | 0 SGO/{ogit => sgo}/verbs/rates.ttl | 0 SGO/{ogit => sgo}/verbs/readBy.ttl | 0 SGO/{ogit => sgo}/verbs/receiverFor.ttl | 0 SGO/{ogit => sgo}/verbs/receives.ttl | 0 SGO/{ogit => sgo}/verbs/receivesFrom.ttl | 0 SGO/{ogit => sgo}/verbs/recommends.ttl | 0 SGO/{ogit => sgo}/verbs/references.ttl | 0 SGO/{ogit => sgo}/verbs/registeredAt.ttl | 0 SGO/{ogit => sgo}/verbs/registers.ttl | 0 SGO/{ogit => sgo}/verbs/rejects.ttl | 0 SGO/{ogit => sgo}/verbs/relates.ttl | 0 SGO/{ogit => sgo}/verbs/repliedWith.ttl | 0 SGO/{ogit => sgo}/verbs/reportedOn.ttl | 0 SGO/{ogit => sgo}/verbs/reports.ttl | 0 SGO/{ogit => sgo}/verbs/represents.ttl | 0 SGO/{ogit => sgo}/verbs/requests.ttl | 0 SGO/{ogit => sgo}/verbs/requires.ttl | 0 SGO/{ogit => sgo}/verbs/residesIn.ttl | 0 SGO/{ogit => sgo}/verbs/resolves.ttl | 0 SGO/{ogit => sgo}/verbs/responds.ttl | 0 SGO/{ogit => sgo}/verbs/reviews.ttl | 0 SGO/{ogit => sgo}/verbs/runsOn.ttl | 0 SGO/{ogit => sgo}/verbs/sameAs.ttl | 0 SGO/{ogit => sgo}/verbs/seenBy.ttl | 0 SGO/{ogit => sgo}/verbs/sells.ttl | 0 SGO/{ogit => sgo}/verbs/sellsTo.ttl | 0 SGO/{ogit => sgo}/verbs/sends.ttl | 0 SGO/{ogit => sgo}/verbs/settlorOf.ttl | 0 SGO/{ogit => sgo}/verbs/signatoryFor.ttl | 0 SGO/{ogit => sgo}/verbs/soldTo.ttl | 0 SGO/{ogit => sgo}/verbs/solves.ttl | 0 SGO/{ogit => sgo}/verbs/specifies.ttl | 0 SGO/{ogit => sgo}/verbs/subscribes.ttl | 0 SGO/{ogit => sgo}/verbs/subsidiaryOf.ttl | 0 SGO/{ogit => sgo}/verbs/supervises.ttl | 0 SGO/{ogit => sgo}/verbs/supports.ttl | 0 SGO/{ogit => sgo}/verbs/tracks.ttl | 0 SGO/{ogit => sgo}/verbs/transfers.ttl | 0 SGO/{ogit => sgo}/verbs/triggers.ttl | 0 SGO/{ogit => sgo}/verbs/trusteeOf.ttl | 0 SGO/{ogit => sgo}/verbs/updates.ttl | 0 SGO/{ogit => sgo}/verbs/uses.ttl | 0 SGO/{ogit => sgo}/verbs/utilizes.ttl | 0 SGO/{ogit => sgo}/verbs/validFor.ttl | 0 SGO/{ogit => sgo}/verbs/versions.ttl | 0 SGO/{ogit => sgo}/verbs/virtualizes.ttl | 0 SGO/{ogit => sgo}/verbs/wasBestManFor.ttl | 0 SGO/{ogit => sgo}/verbs/wasBridesmaidFor.ttl | 0 SGO/{ogit => sgo}/verbs/wasEngagedTo.ttl | 0 SGO/{ogit => sgo}/verbs/wasGroomsmanFor.ttl | 0 SGO/{ogit => sgo}/verbs/wasMaidOfHonorFor.ttl | 0 SGO/{ogit => sgo}/verbs/wasOfficiantFor.ttl | 0 SGO/{ogit => sgo}/verbs/wasWeddingWitnessFor.ttl | 0 .../verbs/whollyOwnedSubsidiaryOf.ttl | 0 SGO/{ogit => sgo}/verbs/wins.ttl | 0 SGO/{ogit => sgo}/verbs/worksOn.ttl | 0 validate.sh | 2 +- 503 files changed, 17 insertions(+), 18 deletions(-) rename SGO/{ogit => }/core/attributes/_c-id.ttl (100%) rename SGO/{ogit => }/core/attributes/_content.ttl (100%) rename SGO/{ogit => }/core/attributes/_created-on.ttl (100%) rename SGO/{ogit => }/core/attributes/_creator-app.ttl (100%) rename SGO/{ogit => }/core/attributes/_creator.ttl (100%) rename SGO/{ogit => }/core/attributes/_deleted-by-app.ttl (100%) rename SGO/{ogit => }/core/attributes/_deleted-by.ttl (100%) rename SGO/{ogit => }/core/attributes/_deleted-on.ttl (100%) rename SGO/{ogit => }/core/attributes/_edge-id.ttl (100%) rename SGO/{ogit => }/core/attributes/_graphtype.ttl (100%) rename SGO/{ogit => }/core/attributes/_id.ttl (100%) rename SGO/{ogit => }/core/attributes/_is-deleted.ttl (100%) rename SGO/{ogit => }/core/attributes/_modified-by-app.ttl (100%) rename SGO/{ogit => }/core/attributes/_modified-by.ttl (100%) rename SGO/{ogit => }/core/attributes/_modified-on.ttl (100%) rename SGO/{ogit => }/core/attributes/_organization.ttl (100%) rename SGO/{ogit => }/core/attributes/_owner.ttl (100%) rename SGO/{ogit => }/core/attributes/_reader.ttl (100%) rename SGO/{ogit => }/core/attributes/_scope.ttl (100%) rename SGO/{ogit => }/core/attributes/_source.ttl (100%) rename SGO/{ogit => }/core/attributes/_tags.ttl (100%) rename SGO/{ogit => }/core/attributes/_type.ttl (100%) rename SGO/{ogit => }/core/attributes/_v-id.ttl (100%) rename SGO/{ogit => }/core/attributes/_v.ttl (100%) rename SGO/{ogit => }/core/attributes/_version.ttl (100%) rename SGO/{ogit => }/core/attributes/_xid.ttl (100%) rename SGO/{ogit => }/core/entities/Node.ttl (100%) create mode 100644 SGO/sgo/README.md rename SGO/{ogit => sgo}/attributes/BatteryState.ttl (100%) rename SGO/{ogit => sgo}/attributes/accessControl.ttl (100%) rename SGO/{ogit => sgo}/attributes/acknowledgeState.ttl (100%) rename SGO/{ogit => sgo}/attributes/addressLocality.ttl (100%) rename SGO/{ogit => sgo}/attributes/alias.ttl (100%) rename SGO/{ogit => sgo}/attributes/alternativeName.ttl (100%) rename SGO/{ogit => sgo}/attributes/altitude.ttl (100%) rename SGO/{ogit => sgo}/attributes/amount.ttl (100%) rename SGO/{ogit => sgo}/attributes/area.ttl (100%) rename SGO/{ogit => sgo}/attributes/asset.ttl (100%) rename SGO/{ogit => sgo}/attributes/assetTag.ttl (100%) rename SGO/{ogit => sgo}/attributes/assignedAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/assignedGroup.ttl (100%) rename SGO/{ogit => sgo}/attributes/attachmentID.ttl (100%) rename SGO/{ogit => sgo}/attributes/author.ttl (100%) rename SGO/{ogit => sgo}/attributes/availability.ttl (100%) rename SGO/{ogit => sgo}/attributes/birthplace.ttl (100%) rename SGO/{ogit => sgo}/attributes/brand.ttl (100%) rename SGO/{ogit => sgo}/attributes/buildingId.ttl (100%) rename SGO/{ogit => sgo}/attributes/businessCategory.ttl (100%) rename SGO/{ogit => sgo}/attributes/businessCriticality.ttl (100%) rename SGO/{ogit => sgo}/attributes/capacity.ttl (100%) rename SGO/{ogit => sgo}/attributes/capacityAvailable.ttl (100%) rename SGO/{ogit => sgo}/attributes/category.ttl (100%) rename SGO/{ogit => sgo}/attributes/certainty.ttl (100%) rename SGO/{ogit => sgo}/attributes/changeLog.ttl (100%) rename SGO/{ogit => sgo}/attributes/checkedInAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/checkedOutAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/ciType.ttl (100%) rename SGO/{ogit => sgo}/attributes/city.ttl (100%) rename SGO/{ogit => sgo}/attributes/class.ttl (100%) rename SGO/{ogit => sgo}/attributes/classification.ttl (100%) rename SGO/{ogit => sgo}/attributes/cleanContent.ttl (100%) rename SGO/{ogit => sgo}/attributes/closedAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/codeType.ttl (100%) rename SGO/{ogit => sgo}/attributes/color.ttl (100%) rename SGO/{ogit => sgo}/attributes/comment.ttl (100%) rename SGO/{ogit => sgo}/attributes/condition.ttl (100%) rename SGO/{ogit => sgo}/attributes/confidence.ttl (100%) rename SGO/{ogit => sgo}/attributes/confidentiality.ttl (100%) rename SGO/{ogit => sgo}/attributes/connectorId.ttl (100%) rename SGO/{ogit => sgo}/attributes/consentLevel.ttl (100%) rename SGO/{ogit => sgo}/attributes/contact.ttl (100%) rename SGO/{ogit => sgo}/attributes/content.ttl (100%) rename SGO/{ogit => sgo}/attributes/coordinate.ttl (100%) rename SGO/{ogit => sgo}/attributes/country.ttl (100%) rename SGO/{ogit => sgo}/attributes/createdAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/createdBy.ttl (100%) rename SGO/{ogit => sgo}/attributes/creationTime.ttl (100%) rename SGO/{ogit => sgo}/attributes/creator.ttl (100%) rename SGO/{ogit => sgo}/attributes/currency.ttl (100%) rename SGO/{ogit => sgo}/attributes/dateOfBirth.ttl (100%) rename SGO/{ogit => sgo}/attributes/dateOfDeath.ttl (100%) rename SGO/{ogit => sgo}/attributes/dayOfWeek.ttl (100%) rename SGO/{ogit => sgo}/attributes/deadline.ttl (100%) rename SGO/{ogit => sgo}/attributes/deliveredAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/description.ttl (100%) rename SGO/{ogit => sgo}/attributes/duration.ttl (100%) rename SGO/{ogit => sgo}/attributes/durationUnit.ttl (100%) rename SGO/{ogit => sgo}/attributes/effort.ttl (100%) rename SGO/{ogit => sgo}/attributes/email.ttl (100%) rename SGO/{ogit => sgo}/attributes/endOfWarranty.ttl (100%) rename SGO/{ogit => sgo}/attributes/endedAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/enumValues.ttl (100%) rename SGO/{ogit => sgo}/attributes/expirationDate.ttl (100%) rename SGO/{ogit => sgo}/attributes/expiresAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/externalId.ttl (100%) rename SGO/{ogit => sgo}/attributes/faultCount.ttl (100%) rename SGO/{ogit => sgo}/attributes/favorite.ttl (100%) rename SGO/{ogit => sgo}/attributes/fax.ttl (100%) rename SGO/{ogit => sgo}/attributes/finishedAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/firstName.ttl (100%) rename SGO/{ogit => sgo}/attributes/firstOccurredAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/followers.ttl (100%) rename SGO/{ogit => sgo}/attributes/foundingDate.ttl (100%) rename SGO/{ogit => sgo}/attributes/frequency.ttl (100%) rename SGO/{ogit => sgo}/attributes/function.ttl (100%) rename SGO/{ogit => sgo}/attributes/gender.ttl (100%) rename SGO/{ogit => sgo}/attributes/id.ttl (100%) rename SGO/{ogit => sgo}/attributes/identifierCode.ttl (100%) rename SGO/{ogit => sgo}/attributes/impact.ttl (100%) rename SGO/{ogit => sgo}/attributes/information.ttl (100%) rename SGO/{ogit => sgo}/attributes/installStatus.ttl (100%) rename SGO/{ogit => sgo}/attributes/installedAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/instance.ttl (100%) rename SGO/{ogit => sgo}/attributes/integrity.ttl (100%) rename SGO/{ogit => sgo}/attributes/inventoryNumber.ttl (100%) rename SGO/{ogit => sgo}/attributes/invoiceNumber.ttl (100%) rename SGO/{ogit => sgo}/attributes/ipAddress.ttl (100%) rename SGO/{ogit => sgo}/attributes/isCritical.ttl (100%) rename SGO/{ogit => sgo}/attributes/isInternal.ttl (100%) rename SGO/{ogit => sgo}/attributes/isMutable.ttl (100%) rename SGO/{ogit => sgo}/attributes/isPermanent.ttl (100%) rename SGO/{ogit => sgo}/attributes/isRoot.ttl (100%) rename SGO/{ogit => sgo}/attributes/isSupported.ttl (100%) rename SGO/{ogit => sgo}/attributes/isValid.ttl (100%) rename SGO/{ogit => sgo}/attributes/justification.ttl (100%) rename SGO/{ogit => sgo}/attributes/language.ttl (100%) rename SGO/{ogit => sgo}/attributes/lastClearedAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/lastName.ttl (100%) rename SGO/{ogit => sgo}/attributes/lastOccurredAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/lastScannedAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/lastUpdatedAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/lastUpdatedBy.ttl (100%) rename SGO/{ogit => sgo}/attributes/latestVersion.ttl (100%) rename SGO/{ogit => sgo}/attributes/latitude.ttl (100%) rename SGO/{ogit => sgo}/attributes/leaseContract.ttl (100%) rename SGO/{ogit => sgo}/attributes/lengthOfReportingPeriod.ttl (100%) rename SGO/{ogit => sgo}/attributes/licenseId.ttl (100%) rename SGO/{ogit => sgo}/attributes/licenseKey.ttl (100%) rename SGO/{ogit => sgo}/attributes/licenseRequestStatus.ttl (100%) rename SGO/{ogit => sgo}/attributes/licenseSubject.ttl (100%) rename SGO/{ogit => sgo}/attributes/licenseType.ttl (100%) rename SGO/{ogit => sgo}/attributes/locationAcquisitionTime.ttl (100%) rename SGO/{ogit => sgo}/attributes/locationPrecision.ttl (100%) rename SGO/{ogit => sgo}/attributes/locked.ttl (100%) rename SGO/{ogit => sgo}/attributes/longitude.ttl (100%) rename SGO/{ogit => sgo}/attributes/lowerLimit.ttl (100%) rename SGO/{ogit => sgo}/attributes/macAddress.ttl (100%) rename SGO/{ogit => sgo}/attributes/maintenanceState.ttl (100%) rename SGO/{ogit => sgo}/attributes/manufacturer.ttl (100%) rename SGO/{ogit => sgo}/attributes/market.ttl (100%) rename SGO/{ogit => sgo}/attributes/message.ttl (100%) rename SGO/{ogit => sgo}/attributes/middleName.ttl (100%) rename SGO/{ogit => sgo}/attributes/mimeType.ttl (100%) rename SGO/{ogit => sgo}/attributes/mobilePhone.ttl (100%) rename SGO/{ogit => sgo}/attributes/mode.ttl (100%) rename SGO/{ogit => sgo}/attributes/model.ttl (100%) rename SGO/{ogit => sgo}/attributes/modelNumber.ttl (100%) rename SGO/{ogit => sgo}/attributes/modificationTime.ttl (100%) rename SGO/{ogit => sgo}/attributes/name.ttl (100%) rename SGO/{ogit => sgo}/attributes/negativeScore.ttl (100%) rename SGO/{ogit => sgo}/attributes/notification.ttl (100%) rename SGO/{ogit => sgo}/attributes/numberOfChildren.ttl (100%) rename SGO/{ogit => sgo}/attributes/occurenceCount.ttl (100%) rename SGO/{ogit => sgo}/attributes/officePhone.ttl (100%) rename SGO/{ogit => sgo}/attributes/onAttribute.ttl (100%) rename SGO/{ogit => sgo}/attributes/onVertex.ttl (100%) rename SGO/{ogit => sgo}/attributes/openedAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/operation.ttl (100%) rename SGO/{ogit => sgo}/attributes/operationalStatus.ttl (100%) rename SGO/{ogit => sgo}/attributes/orderedAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/otherPhone.ttl (100%) rename SGO/{ogit => sgo}/attributes/parentId.ttl (100%) rename SGO/{ogit => sgo}/attributes/passportNumber.ttl (100%) rename SGO/{ogit => sgo}/attributes/pendingChange.ttl (100%) rename SGO/{ogit => sgo}/attributes/phone.ttl (100%) rename SGO/{ogit => sgo}/attributes/placement.ttl (100%) rename SGO/{ogit => sgo}/attributes/plannedFinishDate.ttl (100%) rename SGO/{ogit => sgo}/attributes/plannedStartDate.ttl (100%) rename SGO/{ogit => sgo}/attributes/polarity.ttl (100%) rename SGO/{ogit => sgo}/attributes/position.ttl (100%) rename SGO/{ogit => sgo}/attributes/positionNumber.ttl (100%) rename SGO/{ogit => sgo}/attributes/positiveScore.ttl (100%) rename SGO/{ogit => sgo}/attributes/postalCode.ttl (100%) rename SGO/{ogit => sgo}/attributes/powerConsumption.ttl (100%) rename SGO/{ogit => sgo}/attributes/priority.ttl (100%) rename SGO/{ogit => sgo}/attributes/productOrderNumber.ttl (100%) rename SGO/{ogit => sgo}/attributes/profession.ttl (100%) rename SGO/{ogit => sgo}/attributes/project.ttl (100%) rename SGO/{ogit => sgo}/attributes/public.ttl (100%) rename SGO/{ogit => sgo}/attributes/publishedAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/purchaseDate.ttl (100%) rename SGO/{ogit => sgo}/attributes/purchasedAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/question.ttl (100%) rename SGO/{ogit => sgo}/attributes/range.ttl (100%) rename SGO/{ogit => sgo}/attributes/rank.ttl (100%) rename SGO/{ogit => sgo}/attributes/reason.ttl (100%) rename SGO/{ogit => sgo}/attributes/recipients.ttl (100%) rename SGO/{ogit => sgo}/attributes/religion.ttl (100%) rename SGO/{ogit => sgo}/attributes/reportedAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/reportedBy.ttl (100%) rename SGO/{ogit => sgo}/attributes/resource.ttl (100%) rename SGO/{ogit => sgo}/attributes/response.ttl (100%) rename SGO/{ogit => sgo}/attributes/reviewedAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/reviewedBy.ttl (100%) rename SGO/{ogit => sgo}/attributes/revision.ttl (100%) rename SGO/{ogit => sgo}/attributes/revokedAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/risk.ttl (100%) rename SGO/{ogit => sgo}/attributes/schedule.ttl (100%) rename SGO/{ogit => sgo}/attributes/section.ttl (100%) rename SGO/{ogit => sgo}/attributes/securityClass.ttl (100%) rename SGO/{ogit => sgo}/attributes/serialNumber.ttl (100%) rename SGO/{ogit => sgo}/attributes/serviceContract.ttl (100%) rename SGO/{ogit => sgo}/attributes/severity.ttl (100%) rename SGO/{ogit => sgo}/attributes/sharedWith.ttl (100%) rename SGO/{ogit => sgo}/attributes/shortDescription.ttl (100%) rename SGO/{ogit => sgo}/attributes/size.ttl (100%) rename SGO/{ogit => sgo}/attributes/source.ttl (100%) rename SGO/{ogit => sgo}/attributes/sourceId.ttl (100%) rename SGO/{ogit => sgo}/attributes/sourceTable.ttl (100%) rename SGO/{ogit => sgo}/attributes/soxClass.ttl (100%) rename SGO/{ogit => sgo}/attributes/startOfWarranty.ttl (100%) rename SGO/{ogit => sgo}/attributes/startedAt.ttl (100%) rename SGO/{ogit => sgo}/attributes/status.ttl (100%) rename SGO/{ogit => sgo}/attributes/streetAddress.ttl (100%) rename SGO/{ogit => sgo}/attributes/subCategory.ttl (100%) rename SGO/{ogit => sgo}/attributes/subType.ttl (100%) rename SGO/{ogit => sgo}/attributes/subject.ttl (100%) rename SGO/{ogit => sgo}/attributes/summary.ttl (100%) rename SGO/{ogit => sgo}/attributes/synonyms.ttl (100%) rename SGO/{ogit => sgo}/attributes/tags.ttl (100%) rename SGO/{ogit => sgo}/attributes/taskLog.ttl (100%) rename SGO/{ogit => sgo}/attributes/tenantId.ttl (100%) rename SGO/{ogit => sgo}/attributes/timeZone.ttl (100%) rename SGO/{ogit => sgo}/attributes/timestamp.ttl (100%) rename SGO/{ogit => sgo}/attributes/title.ttl (100%) rename SGO/{ogit => sgo}/attributes/token.ttl (100%) rename SGO/{ogit => sgo}/attributes/tone.ttl (100%) rename SGO/{ogit => sgo}/attributes/type.ttl (100%) rename SGO/{ogit => sgo}/attributes/unit.ttl (100%) rename SGO/{ogit => sgo}/attributes/unitDescription.ttl (100%) rename SGO/{ogit => sgo}/attributes/updateCount.ttl (100%) rename SGO/{ogit => sgo}/attributes/upperLimit.ttl (100%) rename SGO/{ogit => sgo}/attributes/urgency.ttl (100%) rename SGO/{ogit => sgo}/attributes/uri.ttl (100%) rename SGO/{ogit => sgo}/attributes/url.ttl (100%) rename SGO/{ogit => sgo}/attributes/validFrom.ttl (100%) rename SGO/{ogit => sgo}/attributes/validTo.ttl (100%) rename SGO/{ogit => sgo}/attributes/value.ttl (100%) rename SGO/{ogit => sgo}/attributes/valueDate.ttl (100%) rename SGO/{ogit => sgo}/attributes/values.ttl (100%) rename SGO/{ogit => sgo}/attributes/vendor.ttl (100%) rename SGO/{ogit => sgo}/attributes/version.ttl (100%) rename SGO/{ogit => sgo}/attributes/webPage.ttl (100%) rename SGO/{ogit => sgo}/attributes/weight.ttl (100%) rename SGO/{ogit => sgo}/attributes/yearOfBirth.ttl (100%) rename SGO/{ogit => sgo}/attributes/zipCode.ttl (100%) rename SGO/{ogit => sgo}/entities/Account.ttl (100%) rename SGO/{ogit => sgo}/entities/Agent.ttl (100%) rename SGO/{ogit => sgo}/entities/Alert.ttl (100%) rename SGO/{ogit => sgo}/entities/Annotation.ttl (100%) rename SGO/{ogit => sgo}/entities/Asset.ttl (100%) rename SGO/{ogit => sgo}/entities/Attachment.ttl (100%) rename SGO/{ogit => sgo}/entities/Blob.ttl (100%) rename SGO/{ogit => sgo}/entities/Catalog.ttl (100%) rename SGO/{ogit => sgo}/entities/CatalogItem.ttl (100%) rename SGO/{ogit => sgo}/entities/Category.ttl (100%) rename SGO/{ogit => sgo}/entities/Certificate.ttl (100%) rename SGO/{ogit => sgo}/entities/Comment.ttl (100%) rename SGO/{ogit => sgo}/entities/Configuration.ttl (100%) rename SGO/{ogit => sgo}/entities/ConfigurationItem.ttl (100%) rename SGO/{ogit => sgo}/entities/Contract.ttl (100%) rename SGO/{ogit => sgo}/entities/Course.ttl (100%) rename SGO/{ogit => sgo}/entities/CustomApplicationData.ttl (100%) rename SGO/{ogit => sgo}/entities/Device.ttl (100%) rename SGO/{ogit => sgo}/entities/Email.ttl (100%) rename SGO/{ogit => sgo}/entities/Environment.ttl (100%) rename SGO/{ogit => sgo}/entities/Equivalence.ttl (100%) rename SGO/{ogit => sgo}/entities/Event.ttl (100%) rename SGO/{ogit => sgo}/entities/Feature.ttl (100%) rename SGO/{ogit => sgo}/entities/Hyperedge.ttl (100%) rename SGO/{ogit => sgo}/entities/Hyperlink.ttl (100%) rename SGO/{ogit => sgo}/entities/Installation.ttl (100%) rename SGO/{ogit => sgo}/entities/Intent.ttl (100%) rename SGO/{ogit => sgo}/entities/Keyword.ttl (100%) rename SGO/{ogit => sgo}/entities/License.ttl (100%) rename SGO/{ogit => sgo}/entities/LicenseRequest.ttl (100%) rename SGO/{ogit => sgo}/entities/LicenseToken.ttl (100%) rename SGO/{ogit => sgo}/entities/Location.ttl (100%) rename SGO/{ogit => sgo}/entities/Note.ttl (100%) rename SGO/{ogit => sgo}/entities/Notification.ttl (100%) rename SGO/{ogit => sgo}/entities/Offer.ttl (100%) rename SGO/{ogit => sgo}/entities/Organization.ttl (100%) rename SGO/{ogit => sgo}/entities/Parameter.ttl (100%) rename SGO/{ogit => sgo}/entities/ParameterType.ttl (100%) rename SGO/{ogit => sgo}/entities/Penalty.ttl (100%) rename SGO/{ogit => sgo}/entities/Person.ttl (100%) rename SGO/{ogit => sgo}/entities/Policy.ttl (100%) rename SGO/{ogit => sgo}/entities/Product.ttl (100%) rename SGO/{ogit => sgo}/entities/Question.ttl (100%) rename SGO/{ogit => sgo}/entities/Rating.ttl (100%) rename SGO/{ogit => sgo}/entities/Region.ttl (100%) rename SGO/{ogit => sgo}/entities/Relevance.ttl (100%) rename SGO/{ogit => sgo}/entities/ReportedStatistic.ttl (100%) rename SGO/{ogit => sgo}/entities/Requirements.ttl (100%) rename SGO/{ogit => sgo}/entities/Role.ttl (100%) rename SGO/{ogit => sgo}/entities/RoleAssignment.ttl (100%) rename SGO/{ogit => sgo}/entities/Schema.ttl (100%) rename SGO/{ogit => sgo}/entities/Series.ttl (100%) rename SGO/{ogit => sgo}/entities/Status.ttl (100%) rename SGO/{ogit => sgo}/entities/Subscription.ttl (100%) rename SGO/{ogit => sgo}/entities/Tag.ttl (100%) rename SGO/{ogit => sgo}/entities/Task.ttl (100%) rename SGO/{ogit => sgo}/entities/TaskList.ttl (100%) rename SGO/{ogit => sgo}/entities/TermsAndConditions.ttl (100%) rename SGO/{ogit => sgo}/entities/Timeseries.ttl (100%) rename SGO/{ogit => sgo}/entities/Tone.ttl (100%) rename SGO/{ogit => sgo}/entities/Vcard.ttl (100%) rename SGO/{ogit => sgo}/entities/VersioningData.ttl (100%) rename SGO/{ogit => sgo}/verbs/accepts.ttl (100%) rename SGO/{ogit => sgo}/verbs/activates.ttl (100%) rename SGO/{ogit => sgo}/verbs/actsOnBehalfOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/administratorInInsolvencyOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/administratorOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/affects.ttl (100%) rename SGO/{ogit => sgo}/verbs/affiliateOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/alerts.ttl (100%) rename SGO/{ogit => sgo}/verbs/approves.ttl (100%) rename SGO/{ogit => sgo}/verbs/assignedTo.ttl (100%) rename SGO/{ogit => sgo}/verbs/associates.ttl (100%) rename SGO/{ogit => sgo}/verbs/assumes.ttl (100%) rename SGO/{ogit => sgo}/verbs/auditCommitteeMemberOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/auditorOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/availableIn.ttl (100%) rename SGO/{ogit => sgo}/verbs/belongs.ttl (100%) rename SGO/{ogit => sgo}/verbs/beneficialOwnerOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/beneficiaryOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/bills.ttl (100%) rename SGO/{ogit => sgo}/verbs/boardMemberOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/bornIn.ttl (100%) rename SGO/{ogit => sgo}/verbs/calls.ttl (100%) rename SGO/{ogit => sgo}/verbs/capitalOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/causes.ttl (100%) rename SGO/{ogit => sgo}/verbs/centerOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/chairmanOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/closes.ttl (100%) rename SGO/{ogit => sgo}/verbs/closest.ttl (100%) rename SGO/{ogit => sgo}/verbs/communicatesWith.ttl (100%) rename SGO/{ogit => sgo}/verbs/competes.ttl (100%) rename SGO/{ogit => sgo}/verbs/complianceOfficerOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/complies.ttl (100%) rename SGO/{ogit => sgo}/verbs/concludes.ttl (100%) rename SGO/{ogit => sgo}/verbs/conducts.ttl (100%) rename SGO/{ogit => sgo}/verbs/configures.ttl (100%) rename SGO/{ogit => sgo}/verbs/conformsTo.ttl (100%) rename SGO/{ogit => sgo}/verbs/connects.ttl (100%) rename SGO/{ogit => sgo}/verbs/consistsOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/consumes.ttl (100%) rename SGO/{ogit => sgo}/verbs/contains.ttl (100%) rename SGO/{ogit => sgo}/verbs/contractsFor.ttl (100%) rename SGO/{ogit => sgo}/verbs/contributes.ttl (100%) rename SGO/{ogit => sgo}/verbs/controlledBy.ttl (100%) rename SGO/{ogit => sgo}/verbs/corresponds.ttl (100%) rename SGO/{ogit => sgo}/verbs/covers.ttl (100%) rename SGO/{ogit => sgo}/verbs/creates.ttl (100%) rename SGO/{ogit => sgo}/verbs/custodianOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/defines.ttl (100%) rename SGO/{ogit => sgo}/verbs/deliversTo.ttl (100%) rename SGO/{ogit => sgo}/verbs/dependsOn.ttl (100%) rename SGO/{ogit => sgo}/verbs/deployedTo.ttl (100%) rename SGO/{ogit => sgo}/verbs/derivesFrom.ttl (100%) rename SGO/{ogit => sgo}/verbs/describes.ttl (100%) rename SGO/{ogit => sgo}/verbs/desires.ttl (100%) rename SGO/{ogit => sgo}/verbs/directorOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/dislikes.ttl (100%) rename SGO/{ogit => sgo}/verbs/employs.ttl (100%) rename SGO/{ogit => sgo}/verbs/endorses.ttl (100%) rename SGO/{ogit => sgo}/verbs/executorOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/extends.ttl (100%) rename SGO/{ogit => sgo}/verbs/follows.ttl (100%) rename SGO/{ogit => sgo}/verbs/forks.ttl (100%) rename SGO/{ogit => sgo}/verbs/generatedFrom.ttl (100%) rename SGO/{ogit => sgo}/verbs/generates.ttl (100%) rename SGO/{ogit => sgo}/verbs/governs.ttl (100%) rename SGO/{ogit => sgo}/verbs/has.ttl (100%) rename SGO/{ogit => sgo}/verbs/hasChild.ttl (100%) rename SGO/{ogit => sgo}/verbs/hasCousin.ttl (100%) rename SGO/{ogit => sgo}/verbs/hasFormerSpouse.ttl (100%) rename SGO/{ogit => sgo}/verbs/hasGrandchild.ttl (100%) rename SGO/{ogit => sgo}/verbs/hasGrandparent.ttl (100%) rename SGO/{ogit => sgo}/verbs/hasGuardian.ttl (100%) rename SGO/{ogit => sgo}/verbs/hasInLaw.ttl (100%) rename SGO/{ogit => sgo}/verbs/hasNationality.ttl (100%) rename SGO/{ogit => sgo}/verbs/hasNieceNephew.ttl (100%) rename SGO/{ogit => sgo}/verbs/hasParent.ttl (100%) rename SGO/{ogit => sgo}/verbs/hasSibling.ttl (100%) rename SGO/{ogit => sgo}/verbs/hasSpouse.ttl (100%) rename SGO/{ogit => sgo}/verbs/hasUncleAunt.ttl (100%) rename SGO/{ogit => sgo}/verbs/heirOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/hiddenBy.ttl (100%) rename SGO/{ogit => sgo}/verbs/holds.ttl (100%) rename SGO/{ogit => sgo}/verbs/hosts.ttl (100%) rename SGO/{ogit => sgo}/verbs/ignores.ttl (100%) rename SGO/{ogit => sgo}/verbs/implements.ttl (100%) rename SGO/{ogit => sgo}/verbs/includes.ttl (100%) rename SGO/{ogit => sgo}/verbs/installs.ttl (100%) rename SGO/{ogit => sgo}/verbs/investmentManagerOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/invites.ttl (100%) rename SGO/{ogit => sgo}/verbs/isEntitledTo.ttl (100%) rename SGO/{ogit => sgo}/verbs/isMemberOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/isPartOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/isPresent.ttl (100%) rename SGO/{ogit => sgo}/verbs/isResponsibleFor.ttl (100%) rename SGO/{ogit => sgo}/verbs/issues.ttl (100%) rename SGO/{ogit => sgo}/verbs/leads.ttl (100%) rename SGO/{ogit => sgo}/verbs/likes.ttl (100%) rename SGO/{ogit => sgo}/verbs/liquidatorOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/listedAt.ttl (100%) rename SGO/{ogit => sgo}/verbs/lobbyistFor.ttl (100%) rename SGO/{ogit => sgo}/verbs/locatedAt.ttl (100%) rename SGO/{ogit => sgo}/verbs/locatedIn.ttl (100%) rename SGO/{ogit => sgo}/verbs/madeOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/manages.ttl (100%) rename SGO/{ogit => sgo}/verbs/mergedWith.ttl (100%) rename SGO/{ogit => sgo}/verbs/moderates.ttl (100%) rename SGO/{ogit => sgo}/verbs/nomineeFor.ttl (100%) rename SGO/{ogit => sgo}/verbs/officerOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/opens.ttl (100%) rename SGO/{ogit => sgo}/verbs/organizes.ttl (100%) rename SGO/{ogit => sgo}/verbs/originatesIn.ttl (100%) rename SGO/{ogit => sgo}/verbs/overrides.ttl (100%) rename SGO/{ogit => sgo}/verbs/owns.ttl (100%) rename SGO/{ogit => sgo}/verbs/partneredWith.ttl (100%) rename SGO/{ogit => sgo}/verbs/performs.ttl (100%) rename SGO/{ogit => sgo}/verbs/plans.ttl (100%) rename SGO/{ogit => sgo}/verbs/precedes.ttl (100%) rename SGO/{ogit => sgo}/verbs/prioritizes.ttl (100%) rename SGO/{ogit => sgo}/verbs/produces.ttl (100%) rename SGO/{ogit => sgo}/verbs/protectorOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/proves.ttl (100%) rename SGO/{ogit => sgo}/verbs/provides.ttl (100%) rename SGO/{ogit => sgo}/verbs/providesServicesTo.ttl (100%) rename SGO/{ogit => sgo}/verbs/publishes.ttl (100%) rename SGO/{ogit => sgo}/verbs/rates.ttl (100%) rename SGO/{ogit => sgo}/verbs/readBy.ttl (100%) rename SGO/{ogit => sgo}/verbs/receiverFor.ttl (100%) rename SGO/{ogit => sgo}/verbs/receives.ttl (100%) rename SGO/{ogit => sgo}/verbs/receivesFrom.ttl (100%) rename SGO/{ogit => sgo}/verbs/recommends.ttl (100%) rename SGO/{ogit => sgo}/verbs/references.ttl (100%) rename SGO/{ogit => sgo}/verbs/registeredAt.ttl (100%) rename SGO/{ogit => sgo}/verbs/registers.ttl (100%) rename SGO/{ogit => sgo}/verbs/rejects.ttl (100%) rename SGO/{ogit => sgo}/verbs/relates.ttl (100%) rename SGO/{ogit => sgo}/verbs/repliedWith.ttl (100%) rename SGO/{ogit => sgo}/verbs/reportedOn.ttl (100%) rename SGO/{ogit => sgo}/verbs/reports.ttl (100%) rename SGO/{ogit => sgo}/verbs/represents.ttl (100%) rename SGO/{ogit => sgo}/verbs/requests.ttl (100%) rename SGO/{ogit => sgo}/verbs/requires.ttl (100%) rename SGO/{ogit => sgo}/verbs/residesIn.ttl (100%) rename SGO/{ogit => sgo}/verbs/resolves.ttl (100%) rename SGO/{ogit => sgo}/verbs/responds.ttl (100%) rename SGO/{ogit => sgo}/verbs/reviews.ttl (100%) rename SGO/{ogit => sgo}/verbs/runsOn.ttl (100%) rename SGO/{ogit => sgo}/verbs/sameAs.ttl (100%) rename SGO/{ogit => sgo}/verbs/seenBy.ttl (100%) rename SGO/{ogit => sgo}/verbs/sells.ttl (100%) rename SGO/{ogit => sgo}/verbs/sellsTo.ttl (100%) rename SGO/{ogit => sgo}/verbs/sends.ttl (100%) rename SGO/{ogit => sgo}/verbs/settlorOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/signatoryFor.ttl (100%) rename SGO/{ogit => sgo}/verbs/soldTo.ttl (100%) rename SGO/{ogit => sgo}/verbs/solves.ttl (100%) rename SGO/{ogit => sgo}/verbs/specifies.ttl (100%) rename SGO/{ogit => sgo}/verbs/subscribes.ttl (100%) rename SGO/{ogit => sgo}/verbs/subsidiaryOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/supervises.ttl (100%) rename SGO/{ogit => sgo}/verbs/supports.ttl (100%) rename SGO/{ogit => sgo}/verbs/tracks.ttl (100%) rename SGO/{ogit => sgo}/verbs/transfers.ttl (100%) rename SGO/{ogit => sgo}/verbs/triggers.ttl (100%) rename SGO/{ogit => sgo}/verbs/trusteeOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/updates.ttl (100%) rename SGO/{ogit => sgo}/verbs/uses.ttl (100%) rename SGO/{ogit => sgo}/verbs/utilizes.ttl (100%) rename SGO/{ogit => sgo}/verbs/validFor.ttl (100%) rename SGO/{ogit => sgo}/verbs/versions.ttl (100%) rename SGO/{ogit => sgo}/verbs/virtualizes.ttl (100%) rename SGO/{ogit => sgo}/verbs/wasBestManFor.ttl (100%) rename SGO/{ogit => sgo}/verbs/wasBridesmaidFor.ttl (100%) rename SGO/{ogit => sgo}/verbs/wasEngagedTo.ttl (100%) rename SGO/{ogit => sgo}/verbs/wasGroomsmanFor.ttl (100%) rename SGO/{ogit => sgo}/verbs/wasMaidOfHonorFor.ttl (100%) rename SGO/{ogit => sgo}/verbs/wasOfficiantFor.ttl (100%) rename SGO/{ogit => sgo}/verbs/wasWeddingWitnessFor.ttl (100%) rename SGO/{ogit => sgo}/verbs/whollyOwnedSubsidiaryOf.ttl (100%) rename SGO/{ogit => sgo}/verbs/wins.ttl (100%) rename SGO/{ogit => sgo}/verbs/worksOn.ttl (100%) diff --git a/NTO/GFS/README.md b/NTO/GFS/README.md index ba6437df72..a260c093b9 100644 --- a/NTO/GFS/README.md +++ b/NTO/GFS/README.md @@ -36,7 +36,7 @@ with the OGIT review): `securityLevel` 0-100. - `ogit.Auth:usesDevice` -- Account-to-Device, many-to-many. - `ogit:hasVault` -- Person-to-DataScope anchor for Personal - Vaults (location open: `SGO/ogit/verbs/` or `NTO/Auth/verbs/`). + Vaults (location open: `SGO/sgo/verbs/` or `NTO/Auth/verbs/`). - A Workspace marker (boolean attribute) on `ogit.Auth:Team`. ## Audit diff --git a/NTO/HR/README.md b/NTO/HR/README.md index 42a5a7c143..fec98b0709 100644 --- a/NTO/HR/README.md +++ b/NTO/HR/README.md @@ -120,7 +120,7 @@ Organization <--belongs-- Position <--describes-- JobDescription the time share, so its numbered sub-items are held as a list on it rather than promoted to siblings, which would invent shares the source does not state. - **`postNumber`, not `positionNumber`.** `ogit:positionNumber` already exists - in `SGO/ogit/attributes/` and means an ordinal -- "an integer, which displays a + in `SGO/sgo/attributes/` and means an ordinal -- "an integer, which displays a position of numbering" -- so it cannot carry an establishment-plan post identifier. - Generic attributes (`ogit:name`, `description`, `content`, `values`, `reason`, diff --git a/SGO/README.md b/SGO/README.md index 052a212827..231b73b3fe 100644 --- a/SGO/README.md +++ b/SGO/README.md @@ -2,6 +2,8 @@ This directory contains the following things: +* `core` contains the core ontology, i.e., concepts on the meta-model level. * `format` used to contain the format description of the ontology, see the description of [Basic Concepts](https://github.com/arago/OGIT/wiki/Basic-Concepts) instead. -* `ogit` contains every term in the root `ogit:` namespace: the SGO (Semantic Graph Ontology) of OGIT under `attributes`, `entities` and `verbs`, and the core ontology (concepts on the meta-model level) under `core`. See the description of [Basic Concepts](https://github.com/arago/OGIT/wiki/Basic-Concepts) for more information. +* `ogit` contains the OGIT ontology itself. +* `sgo` contains the SGO (Semantic Graph Ontology) of OGIT. See the description of [Basic Concepts](https://github.com/arago/OGIT/wiki/Basic-Concepts) for more information. diff --git a/SGO/ogit/core/attributes/_c-id.ttl b/SGO/core/attributes/_c-id.ttl similarity index 100% rename from SGO/ogit/core/attributes/_c-id.ttl rename to SGO/core/attributes/_c-id.ttl diff --git a/SGO/ogit/core/attributes/_content.ttl b/SGO/core/attributes/_content.ttl similarity index 100% rename from SGO/ogit/core/attributes/_content.ttl rename to SGO/core/attributes/_content.ttl diff --git a/SGO/ogit/core/attributes/_created-on.ttl b/SGO/core/attributes/_created-on.ttl similarity index 100% rename from SGO/ogit/core/attributes/_created-on.ttl rename to SGO/core/attributes/_created-on.ttl diff --git a/SGO/ogit/core/attributes/_creator-app.ttl b/SGO/core/attributes/_creator-app.ttl similarity index 100% rename from SGO/ogit/core/attributes/_creator-app.ttl rename to SGO/core/attributes/_creator-app.ttl diff --git a/SGO/ogit/core/attributes/_creator.ttl b/SGO/core/attributes/_creator.ttl similarity index 100% rename from SGO/ogit/core/attributes/_creator.ttl rename to SGO/core/attributes/_creator.ttl diff --git a/SGO/ogit/core/attributes/_deleted-by-app.ttl b/SGO/core/attributes/_deleted-by-app.ttl similarity index 100% rename from SGO/ogit/core/attributes/_deleted-by-app.ttl rename to SGO/core/attributes/_deleted-by-app.ttl diff --git a/SGO/ogit/core/attributes/_deleted-by.ttl b/SGO/core/attributes/_deleted-by.ttl similarity index 100% rename from SGO/ogit/core/attributes/_deleted-by.ttl rename to SGO/core/attributes/_deleted-by.ttl diff --git a/SGO/ogit/core/attributes/_deleted-on.ttl b/SGO/core/attributes/_deleted-on.ttl similarity index 100% rename from SGO/ogit/core/attributes/_deleted-on.ttl rename to SGO/core/attributes/_deleted-on.ttl diff --git a/SGO/ogit/core/attributes/_edge-id.ttl b/SGO/core/attributes/_edge-id.ttl similarity index 100% rename from SGO/ogit/core/attributes/_edge-id.ttl rename to SGO/core/attributes/_edge-id.ttl diff --git a/SGO/ogit/core/attributes/_graphtype.ttl b/SGO/core/attributes/_graphtype.ttl similarity index 100% rename from SGO/ogit/core/attributes/_graphtype.ttl rename to SGO/core/attributes/_graphtype.ttl diff --git a/SGO/ogit/core/attributes/_id.ttl b/SGO/core/attributes/_id.ttl similarity index 100% rename from SGO/ogit/core/attributes/_id.ttl rename to SGO/core/attributes/_id.ttl diff --git a/SGO/ogit/core/attributes/_is-deleted.ttl b/SGO/core/attributes/_is-deleted.ttl similarity index 100% rename from SGO/ogit/core/attributes/_is-deleted.ttl rename to SGO/core/attributes/_is-deleted.ttl diff --git a/SGO/ogit/core/attributes/_modified-by-app.ttl b/SGO/core/attributes/_modified-by-app.ttl similarity index 100% rename from SGO/ogit/core/attributes/_modified-by-app.ttl rename to SGO/core/attributes/_modified-by-app.ttl diff --git a/SGO/ogit/core/attributes/_modified-by.ttl b/SGO/core/attributes/_modified-by.ttl similarity index 100% rename from SGO/ogit/core/attributes/_modified-by.ttl rename to SGO/core/attributes/_modified-by.ttl diff --git a/SGO/ogit/core/attributes/_modified-on.ttl b/SGO/core/attributes/_modified-on.ttl similarity index 100% rename from SGO/ogit/core/attributes/_modified-on.ttl rename to SGO/core/attributes/_modified-on.ttl diff --git a/SGO/ogit/core/attributes/_organization.ttl b/SGO/core/attributes/_organization.ttl similarity index 100% rename from SGO/ogit/core/attributes/_organization.ttl rename to SGO/core/attributes/_organization.ttl diff --git a/SGO/ogit/core/attributes/_owner.ttl b/SGO/core/attributes/_owner.ttl similarity index 100% rename from SGO/ogit/core/attributes/_owner.ttl rename to SGO/core/attributes/_owner.ttl diff --git a/SGO/ogit/core/attributes/_reader.ttl b/SGO/core/attributes/_reader.ttl similarity index 100% rename from SGO/ogit/core/attributes/_reader.ttl rename to SGO/core/attributes/_reader.ttl diff --git a/SGO/ogit/core/attributes/_scope.ttl b/SGO/core/attributes/_scope.ttl similarity index 100% rename from SGO/ogit/core/attributes/_scope.ttl rename to SGO/core/attributes/_scope.ttl diff --git a/SGO/ogit/core/attributes/_source.ttl b/SGO/core/attributes/_source.ttl similarity index 100% rename from SGO/ogit/core/attributes/_source.ttl rename to SGO/core/attributes/_source.ttl diff --git a/SGO/ogit/core/attributes/_tags.ttl b/SGO/core/attributes/_tags.ttl similarity index 100% rename from SGO/ogit/core/attributes/_tags.ttl rename to SGO/core/attributes/_tags.ttl diff --git a/SGO/ogit/core/attributes/_type.ttl b/SGO/core/attributes/_type.ttl similarity index 100% rename from SGO/ogit/core/attributes/_type.ttl rename to SGO/core/attributes/_type.ttl diff --git a/SGO/ogit/core/attributes/_v-id.ttl b/SGO/core/attributes/_v-id.ttl similarity index 100% rename from SGO/ogit/core/attributes/_v-id.ttl rename to SGO/core/attributes/_v-id.ttl diff --git a/SGO/ogit/core/attributes/_v.ttl b/SGO/core/attributes/_v.ttl similarity index 100% rename from SGO/ogit/core/attributes/_v.ttl rename to SGO/core/attributes/_v.ttl diff --git a/SGO/ogit/core/attributes/_version.ttl b/SGO/core/attributes/_version.ttl similarity index 100% rename from SGO/ogit/core/attributes/_version.ttl rename to SGO/core/attributes/_version.ttl diff --git a/SGO/ogit/core/attributes/_xid.ttl b/SGO/core/attributes/_xid.ttl similarity index 100% rename from SGO/ogit/core/attributes/_xid.ttl rename to SGO/core/attributes/_xid.ttl diff --git a/SGO/ogit/core/entities/Node.ttl b/SGO/core/entities/Node.ttl similarity index 100% rename from SGO/ogit/core/entities/Node.ttl rename to SGO/core/entities/Node.ttl diff --git a/SGO/ogit/README.md b/SGO/ogit/README.md index ba9950ec71..0c46bae153 100644 --- a/SGO/ogit/README.md +++ b/SGO/ogit/README.md @@ -1,15 +1,2 @@ -### Overview -This directory contains the terms in the root `ogit:` namespace -(`http://www.purl.org/ogit/`): - -* `attributes`, `entities`, `verbs`: the SGO (Semantic Graph Ontology) of OGIT, - and the ontology objects whose instance nodes and edges describe the - ontology itself. -* `core`: the core ontology, i.e. concepts on the meta-model level. - -They live under a directory named `ogit` because the validator -(`bin/ogit-validator.jar`) requires every file to sit below a directory named -after its namespace: `ogit:creates` must be at `.../ogit//creates.ttl`. - -Please refer to the [OGIT ontology details](https://github.com/almatoai/OGIT/wiki/OGIT-ontology-details) wiki page for an explanation of these concepts. +Here we define ontology objects whose instances nodes/edges will be used to described the ontology itself diff --git a/SGO/sgo/README.md b/SGO/sgo/README.md new file mode 100644 index 0000000000..95e7ebc78b --- /dev/null +++ b/SGO/sgo/README.md @@ -0,0 +1,10 @@ +### Overview + +This directory contains the following things: + +* `attributes`: The definitions of OGIT attributes +* `entities`: The definitions of OGIT attributes +* `verbs`: The definitions of OGIT attributes + +Please refer to the [OGIT ontology details](https://github.com/almatoai/OGIT/wiki/OGIT-ontology-details) wiki page for an explanation of these concepts. + diff --git a/SGO/ogit/attributes/BatteryState.ttl b/SGO/sgo/attributes/BatteryState.ttl similarity index 100% rename from SGO/ogit/attributes/BatteryState.ttl rename to SGO/sgo/attributes/BatteryState.ttl diff --git a/SGO/ogit/attributes/accessControl.ttl b/SGO/sgo/attributes/accessControl.ttl similarity index 100% rename from SGO/ogit/attributes/accessControl.ttl rename to SGO/sgo/attributes/accessControl.ttl diff --git a/SGO/ogit/attributes/acknowledgeState.ttl b/SGO/sgo/attributes/acknowledgeState.ttl similarity index 100% rename from SGO/ogit/attributes/acknowledgeState.ttl rename to SGO/sgo/attributes/acknowledgeState.ttl diff --git a/SGO/ogit/attributes/addressLocality.ttl b/SGO/sgo/attributes/addressLocality.ttl similarity index 100% rename from SGO/ogit/attributes/addressLocality.ttl rename to SGO/sgo/attributes/addressLocality.ttl diff --git a/SGO/ogit/attributes/alias.ttl b/SGO/sgo/attributes/alias.ttl similarity index 100% rename from SGO/ogit/attributes/alias.ttl rename to SGO/sgo/attributes/alias.ttl diff --git a/SGO/ogit/attributes/alternativeName.ttl b/SGO/sgo/attributes/alternativeName.ttl similarity index 100% rename from SGO/ogit/attributes/alternativeName.ttl rename to SGO/sgo/attributes/alternativeName.ttl diff --git a/SGO/ogit/attributes/altitude.ttl b/SGO/sgo/attributes/altitude.ttl similarity index 100% rename from SGO/ogit/attributes/altitude.ttl rename to SGO/sgo/attributes/altitude.ttl diff --git a/SGO/ogit/attributes/amount.ttl b/SGO/sgo/attributes/amount.ttl similarity index 100% rename from SGO/ogit/attributes/amount.ttl rename to SGO/sgo/attributes/amount.ttl diff --git a/SGO/ogit/attributes/area.ttl b/SGO/sgo/attributes/area.ttl similarity index 100% rename from SGO/ogit/attributes/area.ttl rename to SGO/sgo/attributes/area.ttl diff --git a/SGO/ogit/attributes/asset.ttl b/SGO/sgo/attributes/asset.ttl similarity index 100% rename from SGO/ogit/attributes/asset.ttl rename to SGO/sgo/attributes/asset.ttl diff --git a/SGO/ogit/attributes/assetTag.ttl b/SGO/sgo/attributes/assetTag.ttl similarity index 100% rename from SGO/ogit/attributes/assetTag.ttl rename to SGO/sgo/attributes/assetTag.ttl diff --git a/SGO/ogit/attributes/assignedAt.ttl b/SGO/sgo/attributes/assignedAt.ttl similarity index 100% rename from SGO/ogit/attributes/assignedAt.ttl rename to SGO/sgo/attributes/assignedAt.ttl diff --git a/SGO/ogit/attributes/assignedGroup.ttl b/SGO/sgo/attributes/assignedGroup.ttl similarity index 100% rename from SGO/ogit/attributes/assignedGroup.ttl rename to SGO/sgo/attributes/assignedGroup.ttl diff --git a/SGO/ogit/attributes/attachmentID.ttl b/SGO/sgo/attributes/attachmentID.ttl similarity index 100% rename from SGO/ogit/attributes/attachmentID.ttl rename to SGO/sgo/attributes/attachmentID.ttl diff --git a/SGO/ogit/attributes/author.ttl b/SGO/sgo/attributes/author.ttl similarity index 100% rename from SGO/ogit/attributes/author.ttl rename to SGO/sgo/attributes/author.ttl diff --git a/SGO/ogit/attributes/availability.ttl b/SGO/sgo/attributes/availability.ttl similarity index 100% rename from SGO/ogit/attributes/availability.ttl rename to SGO/sgo/attributes/availability.ttl diff --git a/SGO/ogit/attributes/birthplace.ttl b/SGO/sgo/attributes/birthplace.ttl similarity index 100% rename from SGO/ogit/attributes/birthplace.ttl rename to SGO/sgo/attributes/birthplace.ttl diff --git a/SGO/ogit/attributes/brand.ttl b/SGO/sgo/attributes/brand.ttl similarity index 100% rename from SGO/ogit/attributes/brand.ttl rename to SGO/sgo/attributes/brand.ttl diff --git a/SGO/ogit/attributes/buildingId.ttl b/SGO/sgo/attributes/buildingId.ttl similarity index 100% rename from SGO/ogit/attributes/buildingId.ttl rename to SGO/sgo/attributes/buildingId.ttl diff --git a/SGO/ogit/attributes/businessCategory.ttl b/SGO/sgo/attributes/businessCategory.ttl similarity index 100% rename from SGO/ogit/attributes/businessCategory.ttl rename to SGO/sgo/attributes/businessCategory.ttl diff --git a/SGO/ogit/attributes/businessCriticality.ttl b/SGO/sgo/attributes/businessCriticality.ttl similarity index 100% rename from SGO/ogit/attributes/businessCriticality.ttl rename to SGO/sgo/attributes/businessCriticality.ttl diff --git a/SGO/ogit/attributes/capacity.ttl b/SGO/sgo/attributes/capacity.ttl similarity index 100% rename from SGO/ogit/attributes/capacity.ttl rename to SGO/sgo/attributes/capacity.ttl diff --git a/SGO/ogit/attributes/capacityAvailable.ttl b/SGO/sgo/attributes/capacityAvailable.ttl similarity index 100% rename from SGO/ogit/attributes/capacityAvailable.ttl rename to SGO/sgo/attributes/capacityAvailable.ttl diff --git a/SGO/ogit/attributes/category.ttl b/SGO/sgo/attributes/category.ttl similarity index 100% rename from SGO/ogit/attributes/category.ttl rename to SGO/sgo/attributes/category.ttl diff --git a/SGO/ogit/attributes/certainty.ttl b/SGO/sgo/attributes/certainty.ttl similarity index 100% rename from SGO/ogit/attributes/certainty.ttl rename to SGO/sgo/attributes/certainty.ttl diff --git a/SGO/ogit/attributes/changeLog.ttl b/SGO/sgo/attributes/changeLog.ttl similarity index 100% rename from SGO/ogit/attributes/changeLog.ttl rename to SGO/sgo/attributes/changeLog.ttl diff --git a/SGO/ogit/attributes/checkedInAt.ttl b/SGO/sgo/attributes/checkedInAt.ttl similarity index 100% rename from SGO/ogit/attributes/checkedInAt.ttl rename to SGO/sgo/attributes/checkedInAt.ttl diff --git a/SGO/ogit/attributes/checkedOutAt.ttl b/SGO/sgo/attributes/checkedOutAt.ttl similarity index 100% rename from SGO/ogit/attributes/checkedOutAt.ttl rename to SGO/sgo/attributes/checkedOutAt.ttl diff --git a/SGO/ogit/attributes/ciType.ttl b/SGO/sgo/attributes/ciType.ttl similarity index 100% rename from SGO/ogit/attributes/ciType.ttl rename to SGO/sgo/attributes/ciType.ttl diff --git a/SGO/ogit/attributes/city.ttl b/SGO/sgo/attributes/city.ttl similarity index 100% rename from SGO/ogit/attributes/city.ttl rename to SGO/sgo/attributes/city.ttl diff --git a/SGO/ogit/attributes/class.ttl b/SGO/sgo/attributes/class.ttl similarity index 100% rename from SGO/ogit/attributes/class.ttl rename to SGO/sgo/attributes/class.ttl diff --git a/SGO/ogit/attributes/classification.ttl b/SGO/sgo/attributes/classification.ttl similarity index 100% rename from SGO/ogit/attributes/classification.ttl rename to SGO/sgo/attributes/classification.ttl diff --git a/SGO/ogit/attributes/cleanContent.ttl b/SGO/sgo/attributes/cleanContent.ttl similarity index 100% rename from SGO/ogit/attributes/cleanContent.ttl rename to SGO/sgo/attributes/cleanContent.ttl diff --git a/SGO/ogit/attributes/closedAt.ttl b/SGO/sgo/attributes/closedAt.ttl similarity index 100% rename from SGO/ogit/attributes/closedAt.ttl rename to SGO/sgo/attributes/closedAt.ttl diff --git a/SGO/ogit/attributes/codeType.ttl b/SGO/sgo/attributes/codeType.ttl similarity index 100% rename from SGO/ogit/attributes/codeType.ttl rename to SGO/sgo/attributes/codeType.ttl diff --git a/SGO/ogit/attributes/color.ttl b/SGO/sgo/attributes/color.ttl similarity index 100% rename from SGO/ogit/attributes/color.ttl rename to SGO/sgo/attributes/color.ttl diff --git a/SGO/ogit/attributes/comment.ttl b/SGO/sgo/attributes/comment.ttl similarity index 100% rename from SGO/ogit/attributes/comment.ttl rename to SGO/sgo/attributes/comment.ttl diff --git a/SGO/ogit/attributes/condition.ttl b/SGO/sgo/attributes/condition.ttl similarity index 100% rename from SGO/ogit/attributes/condition.ttl rename to SGO/sgo/attributes/condition.ttl diff --git a/SGO/ogit/attributes/confidence.ttl b/SGO/sgo/attributes/confidence.ttl similarity index 100% rename from SGO/ogit/attributes/confidence.ttl rename to SGO/sgo/attributes/confidence.ttl diff --git a/SGO/ogit/attributes/confidentiality.ttl b/SGO/sgo/attributes/confidentiality.ttl similarity index 100% rename from SGO/ogit/attributes/confidentiality.ttl rename to SGO/sgo/attributes/confidentiality.ttl diff --git a/SGO/ogit/attributes/connectorId.ttl b/SGO/sgo/attributes/connectorId.ttl similarity index 100% rename from SGO/ogit/attributes/connectorId.ttl rename to SGO/sgo/attributes/connectorId.ttl diff --git a/SGO/ogit/attributes/consentLevel.ttl b/SGO/sgo/attributes/consentLevel.ttl similarity index 100% rename from SGO/ogit/attributes/consentLevel.ttl rename to SGO/sgo/attributes/consentLevel.ttl diff --git a/SGO/ogit/attributes/contact.ttl b/SGO/sgo/attributes/contact.ttl similarity index 100% rename from SGO/ogit/attributes/contact.ttl rename to SGO/sgo/attributes/contact.ttl diff --git a/SGO/ogit/attributes/content.ttl b/SGO/sgo/attributes/content.ttl similarity index 100% rename from SGO/ogit/attributes/content.ttl rename to SGO/sgo/attributes/content.ttl diff --git a/SGO/ogit/attributes/coordinate.ttl b/SGO/sgo/attributes/coordinate.ttl similarity index 100% rename from SGO/ogit/attributes/coordinate.ttl rename to SGO/sgo/attributes/coordinate.ttl diff --git a/SGO/ogit/attributes/country.ttl b/SGO/sgo/attributes/country.ttl similarity index 100% rename from SGO/ogit/attributes/country.ttl rename to SGO/sgo/attributes/country.ttl diff --git a/SGO/ogit/attributes/createdAt.ttl b/SGO/sgo/attributes/createdAt.ttl similarity index 100% rename from SGO/ogit/attributes/createdAt.ttl rename to SGO/sgo/attributes/createdAt.ttl diff --git a/SGO/ogit/attributes/createdBy.ttl b/SGO/sgo/attributes/createdBy.ttl similarity index 100% rename from SGO/ogit/attributes/createdBy.ttl rename to SGO/sgo/attributes/createdBy.ttl diff --git a/SGO/ogit/attributes/creationTime.ttl b/SGO/sgo/attributes/creationTime.ttl similarity index 100% rename from SGO/ogit/attributes/creationTime.ttl rename to SGO/sgo/attributes/creationTime.ttl diff --git a/SGO/ogit/attributes/creator.ttl b/SGO/sgo/attributes/creator.ttl similarity index 100% rename from SGO/ogit/attributes/creator.ttl rename to SGO/sgo/attributes/creator.ttl diff --git a/SGO/ogit/attributes/currency.ttl b/SGO/sgo/attributes/currency.ttl similarity index 100% rename from SGO/ogit/attributes/currency.ttl rename to SGO/sgo/attributes/currency.ttl diff --git a/SGO/ogit/attributes/dateOfBirth.ttl b/SGO/sgo/attributes/dateOfBirth.ttl similarity index 100% rename from SGO/ogit/attributes/dateOfBirth.ttl rename to SGO/sgo/attributes/dateOfBirth.ttl diff --git a/SGO/ogit/attributes/dateOfDeath.ttl b/SGO/sgo/attributes/dateOfDeath.ttl similarity index 100% rename from SGO/ogit/attributes/dateOfDeath.ttl rename to SGO/sgo/attributes/dateOfDeath.ttl diff --git a/SGO/ogit/attributes/dayOfWeek.ttl b/SGO/sgo/attributes/dayOfWeek.ttl similarity index 100% rename from SGO/ogit/attributes/dayOfWeek.ttl rename to SGO/sgo/attributes/dayOfWeek.ttl diff --git a/SGO/ogit/attributes/deadline.ttl b/SGO/sgo/attributes/deadline.ttl similarity index 100% rename from SGO/ogit/attributes/deadline.ttl rename to SGO/sgo/attributes/deadline.ttl diff --git a/SGO/ogit/attributes/deliveredAt.ttl b/SGO/sgo/attributes/deliveredAt.ttl similarity index 100% rename from SGO/ogit/attributes/deliveredAt.ttl rename to SGO/sgo/attributes/deliveredAt.ttl diff --git a/SGO/ogit/attributes/description.ttl b/SGO/sgo/attributes/description.ttl similarity index 100% rename from SGO/ogit/attributes/description.ttl rename to SGO/sgo/attributes/description.ttl diff --git a/SGO/ogit/attributes/duration.ttl b/SGO/sgo/attributes/duration.ttl similarity index 100% rename from SGO/ogit/attributes/duration.ttl rename to SGO/sgo/attributes/duration.ttl diff --git a/SGO/ogit/attributes/durationUnit.ttl b/SGO/sgo/attributes/durationUnit.ttl similarity index 100% rename from SGO/ogit/attributes/durationUnit.ttl rename to SGO/sgo/attributes/durationUnit.ttl diff --git a/SGO/ogit/attributes/effort.ttl b/SGO/sgo/attributes/effort.ttl similarity index 100% rename from SGO/ogit/attributes/effort.ttl rename to SGO/sgo/attributes/effort.ttl diff --git a/SGO/ogit/attributes/email.ttl b/SGO/sgo/attributes/email.ttl similarity index 100% rename from SGO/ogit/attributes/email.ttl rename to SGO/sgo/attributes/email.ttl diff --git a/SGO/ogit/attributes/endOfWarranty.ttl b/SGO/sgo/attributes/endOfWarranty.ttl similarity index 100% rename from SGO/ogit/attributes/endOfWarranty.ttl rename to SGO/sgo/attributes/endOfWarranty.ttl diff --git a/SGO/ogit/attributes/endedAt.ttl b/SGO/sgo/attributes/endedAt.ttl similarity index 100% rename from SGO/ogit/attributes/endedAt.ttl rename to SGO/sgo/attributes/endedAt.ttl diff --git a/SGO/ogit/attributes/enumValues.ttl b/SGO/sgo/attributes/enumValues.ttl similarity index 100% rename from SGO/ogit/attributes/enumValues.ttl rename to SGO/sgo/attributes/enumValues.ttl diff --git a/SGO/ogit/attributes/expirationDate.ttl b/SGO/sgo/attributes/expirationDate.ttl similarity index 100% rename from SGO/ogit/attributes/expirationDate.ttl rename to SGO/sgo/attributes/expirationDate.ttl diff --git a/SGO/ogit/attributes/expiresAt.ttl b/SGO/sgo/attributes/expiresAt.ttl similarity index 100% rename from SGO/ogit/attributes/expiresAt.ttl rename to SGO/sgo/attributes/expiresAt.ttl diff --git a/SGO/ogit/attributes/externalId.ttl b/SGO/sgo/attributes/externalId.ttl similarity index 100% rename from SGO/ogit/attributes/externalId.ttl rename to SGO/sgo/attributes/externalId.ttl diff --git a/SGO/ogit/attributes/faultCount.ttl b/SGO/sgo/attributes/faultCount.ttl similarity index 100% rename from SGO/ogit/attributes/faultCount.ttl rename to SGO/sgo/attributes/faultCount.ttl diff --git a/SGO/ogit/attributes/favorite.ttl b/SGO/sgo/attributes/favorite.ttl similarity index 100% rename from SGO/ogit/attributes/favorite.ttl rename to SGO/sgo/attributes/favorite.ttl diff --git a/SGO/ogit/attributes/fax.ttl b/SGO/sgo/attributes/fax.ttl similarity index 100% rename from SGO/ogit/attributes/fax.ttl rename to SGO/sgo/attributes/fax.ttl diff --git a/SGO/ogit/attributes/finishedAt.ttl b/SGO/sgo/attributes/finishedAt.ttl similarity index 100% rename from SGO/ogit/attributes/finishedAt.ttl rename to SGO/sgo/attributes/finishedAt.ttl diff --git a/SGO/ogit/attributes/firstName.ttl b/SGO/sgo/attributes/firstName.ttl similarity index 100% rename from SGO/ogit/attributes/firstName.ttl rename to SGO/sgo/attributes/firstName.ttl diff --git a/SGO/ogit/attributes/firstOccurredAt.ttl b/SGO/sgo/attributes/firstOccurredAt.ttl similarity index 100% rename from SGO/ogit/attributes/firstOccurredAt.ttl rename to SGO/sgo/attributes/firstOccurredAt.ttl diff --git a/SGO/ogit/attributes/followers.ttl b/SGO/sgo/attributes/followers.ttl similarity index 100% rename from SGO/ogit/attributes/followers.ttl rename to SGO/sgo/attributes/followers.ttl diff --git a/SGO/ogit/attributes/foundingDate.ttl b/SGO/sgo/attributes/foundingDate.ttl similarity index 100% rename from SGO/ogit/attributes/foundingDate.ttl rename to SGO/sgo/attributes/foundingDate.ttl diff --git a/SGO/ogit/attributes/frequency.ttl b/SGO/sgo/attributes/frequency.ttl similarity index 100% rename from SGO/ogit/attributes/frequency.ttl rename to SGO/sgo/attributes/frequency.ttl diff --git a/SGO/ogit/attributes/function.ttl b/SGO/sgo/attributes/function.ttl similarity index 100% rename from SGO/ogit/attributes/function.ttl rename to SGO/sgo/attributes/function.ttl diff --git a/SGO/ogit/attributes/gender.ttl b/SGO/sgo/attributes/gender.ttl similarity index 100% rename from SGO/ogit/attributes/gender.ttl rename to SGO/sgo/attributes/gender.ttl diff --git a/SGO/ogit/attributes/id.ttl b/SGO/sgo/attributes/id.ttl similarity index 100% rename from SGO/ogit/attributes/id.ttl rename to SGO/sgo/attributes/id.ttl diff --git a/SGO/ogit/attributes/identifierCode.ttl b/SGO/sgo/attributes/identifierCode.ttl similarity index 100% rename from SGO/ogit/attributes/identifierCode.ttl rename to SGO/sgo/attributes/identifierCode.ttl diff --git a/SGO/ogit/attributes/impact.ttl b/SGO/sgo/attributes/impact.ttl similarity index 100% rename from SGO/ogit/attributes/impact.ttl rename to SGO/sgo/attributes/impact.ttl diff --git a/SGO/ogit/attributes/information.ttl b/SGO/sgo/attributes/information.ttl similarity index 100% rename from SGO/ogit/attributes/information.ttl rename to SGO/sgo/attributes/information.ttl diff --git a/SGO/ogit/attributes/installStatus.ttl b/SGO/sgo/attributes/installStatus.ttl similarity index 100% rename from SGO/ogit/attributes/installStatus.ttl rename to SGO/sgo/attributes/installStatus.ttl diff --git a/SGO/ogit/attributes/installedAt.ttl b/SGO/sgo/attributes/installedAt.ttl similarity index 100% rename from SGO/ogit/attributes/installedAt.ttl rename to SGO/sgo/attributes/installedAt.ttl diff --git a/SGO/ogit/attributes/instance.ttl b/SGO/sgo/attributes/instance.ttl similarity index 100% rename from SGO/ogit/attributes/instance.ttl rename to SGO/sgo/attributes/instance.ttl diff --git a/SGO/ogit/attributes/integrity.ttl b/SGO/sgo/attributes/integrity.ttl similarity index 100% rename from SGO/ogit/attributes/integrity.ttl rename to SGO/sgo/attributes/integrity.ttl diff --git a/SGO/ogit/attributes/inventoryNumber.ttl b/SGO/sgo/attributes/inventoryNumber.ttl similarity index 100% rename from SGO/ogit/attributes/inventoryNumber.ttl rename to SGO/sgo/attributes/inventoryNumber.ttl diff --git a/SGO/ogit/attributes/invoiceNumber.ttl b/SGO/sgo/attributes/invoiceNumber.ttl similarity index 100% rename from SGO/ogit/attributes/invoiceNumber.ttl rename to SGO/sgo/attributes/invoiceNumber.ttl diff --git a/SGO/ogit/attributes/ipAddress.ttl b/SGO/sgo/attributes/ipAddress.ttl similarity index 100% rename from SGO/ogit/attributes/ipAddress.ttl rename to SGO/sgo/attributes/ipAddress.ttl diff --git a/SGO/ogit/attributes/isCritical.ttl b/SGO/sgo/attributes/isCritical.ttl similarity index 100% rename from SGO/ogit/attributes/isCritical.ttl rename to SGO/sgo/attributes/isCritical.ttl diff --git a/SGO/ogit/attributes/isInternal.ttl b/SGO/sgo/attributes/isInternal.ttl similarity index 100% rename from SGO/ogit/attributes/isInternal.ttl rename to SGO/sgo/attributes/isInternal.ttl diff --git a/SGO/ogit/attributes/isMutable.ttl b/SGO/sgo/attributes/isMutable.ttl similarity index 100% rename from SGO/ogit/attributes/isMutable.ttl rename to SGO/sgo/attributes/isMutable.ttl diff --git a/SGO/ogit/attributes/isPermanent.ttl b/SGO/sgo/attributes/isPermanent.ttl similarity index 100% rename from SGO/ogit/attributes/isPermanent.ttl rename to SGO/sgo/attributes/isPermanent.ttl diff --git a/SGO/ogit/attributes/isRoot.ttl b/SGO/sgo/attributes/isRoot.ttl similarity index 100% rename from SGO/ogit/attributes/isRoot.ttl rename to SGO/sgo/attributes/isRoot.ttl diff --git a/SGO/ogit/attributes/isSupported.ttl b/SGO/sgo/attributes/isSupported.ttl similarity index 100% rename from SGO/ogit/attributes/isSupported.ttl rename to SGO/sgo/attributes/isSupported.ttl diff --git a/SGO/ogit/attributes/isValid.ttl b/SGO/sgo/attributes/isValid.ttl similarity index 100% rename from SGO/ogit/attributes/isValid.ttl rename to SGO/sgo/attributes/isValid.ttl diff --git a/SGO/ogit/attributes/justification.ttl b/SGO/sgo/attributes/justification.ttl similarity index 100% rename from SGO/ogit/attributes/justification.ttl rename to SGO/sgo/attributes/justification.ttl diff --git a/SGO/ogit/attributes/language.ttl b/SGO/sgo/attributes/language.ttl similarity index 100% rename from SGO/ogit/attributes/language.ttl rename to SGO/sgo/attributes/language.ttl diff --git a/SGO/ogit/attributes/lastClearedAt.ttl b/SGO/sgo/attributes/lastClearedAt.ttl similarity index 100% rename from SGO/ogit/attributes/lastClearedAt.ttl rename to SGO/sgo/attributes/lastClearedAt.ttl diff --git a/SGO/ogit/attributes/lastName.ttl b/SGO/sgo/attributes/lastName.ttl similarity index 100% rename from SGO/ogit/attributes/lastName.ttl rename to SGO/sgo/attributes/lastName.ttl diff --git a/SGO/ogit/attributes/lastOccurredAt.ttl b/SGO/sgo/attributes/lastOccurredAt.ttl similarity index 100% rename from SGO/ogit/attributes/lastOccurredAt.ttl rename to SGO/sgo/attributes/lastOccurredAt.ttl diff --git a/SGO/ogit/attributes/lastScannedAt.ttl b/SGO/sgo/attributes/lastScannedAt.ttl similarity index 100% rename from SGO/ogit/attributes/lastScannedAt.ttl rename to SGO/sgo/attributes/lastScannedAt.ttl diff --git a/SGO/ogit/attributes/lastUpdatedAt.ttl b/SGO/sgo/attributes/lastUpdatedAt.ttl similarity index 100% rename from SGO/ogit/attributes/lastUpdatedAt.ttl rename to SGO/sgo/attributes/lastUpdatedAt.ttl diff --git a/SGO/ogit/attributes/lastUpdatedBy.ttl b/SGO/sgo/attributes/lastUpdatedBy.ttl similarity index 100% rename from SGO/ogit/attributes/lastUpdatedBy.ttl rename to SGO/sgo/attributes/lastUpdatedBy.ttl diff --git a/SGO/ogit/attributes/latestVersion.ttl b/SGO/sgo/attributes/latestVersion.ttl similarity index 100% rename from SGO/ogit/attributes/latestVersion.ttl rename to SGO/sgo/attributes/latestVersion.ttl diff --git a/SGO/ogit/attributes/latitude.ttl b/SGO/sgo/attributes/latitude.ttl similarity index 100% rename from SGO/ogit/attributes/latitude.ttl rename to SGO/sgo/attributes/latitude.ttl diff --git a/SGO/ogit/attributes/leaseContract.ttl b/SGO/sgo/attributes/leaseContract.ttl similarity index 100% rename from SGO/ogit/attributes/leaseContract.ttl rename to SGO/sgo/attributes/leaseContract.ttl diff --git a/SGO/ogit/attributes/lengthOfReportingPeriod.ttl b/SGO/sgo/attributes/lengthOfReportingPeriod.ttl similarity index 100% rename from SGO/ogit/attributes/lengthOfReportingPeriod.ttl rename to SGO/sgo/attributes/lengthOfReportingPeriod.ttl diff --git a/SGO/ogit/attributes/licenseId.ttl b/SGO/sgo/attributes/licenseId.ttl similarity index 100% rename from SGO/ogit/attributes/licenseId.ttl rename to SGO/sgo/attributes/licenseId.ttl diff --git a/SGO/ogit/attributes/licenseKey.ttl b/SGO/sgo/attributes/licenseKey.ttl similarity index 100% rename from SGO/ogit/attributes/licenseKey.ttl rename to SGO/sgo/attributes/licenseKey.ttl diff --git a/SGO/ogit/attributes/licenseRequestStatus.ttl b/SGO/sgo/attributes/licenseRequestStatus.ttl similarity index 100% rename from SGO/ogit/attributes/licenseRequestStatus.ttl rename to SGO/sgo/attributes/licenseRequestStatus.ttl diff --git a/SGO/ogit/attributes/licenseSubject.ttl b/SGO/sgo/attributes/licenseSubject.ttl similarity index 100% rename from SGO/ogit/attributes/licenseSubject.ttl rename to SGO/sgo/attributes/licenseSubject.ttl diff --git a/SGO/ogit/attributes/licenseType.ttl b/SGO/sgo/attributes/licenseType.ttl similarity index 100% rename from SGO/ogit/attributes/licenseType.ttl rename to SGO/sgo/attributes/licenseType.ttl diff --git a/SGO/ogit/attributes/locationAcquisitionTime.ttl b/SGO/sgo/attributes/locationAcquisitionTime.ttl similarity index 100% rename from SGO/ogit/attributes/locationAcquisitionTime.ttl rename to SGO/sgo/attributes/locationAcquisitionTime.ttl diff --git a/SGO/ogit/attributes/locationPrecision.ttl b/SGO/sgo/attributes/locationPrecision.ttl similarity index 100% rename from SGO/ogit/attributes/locationPrecision.ttl rename to SGO/sgo/attributes/locationPrecision.ttl diff --git a/SGO/ogit/attributes/locked.ttl b/SGO/sgo/attributes/locked.ttl similarity index 100% rename from SGO/ogit/attributes/locked.ttl rename to SGO/sgo/attributes/locked.ttl diff --git a/SGO/ogit/attributes/longitude.ttl b/SGO/sgo/attributes/longitude.ttl similarity index 100% rename from SGO/ogit/attributes/longitude.ttl rename to SGO/sgo/attributes/longitude.ttl diff --git a/SGO/ogit/attributes/lowerLimit.ttl b/SGO/sgo/attributes/lowerLimit.ttl similarity index 100% rename from SGO/ogit/attributes/lowerLimit.ttl rename to SGO/sgo/attributes/lowerLimit.ttl diff --git a/SGO/ogit/attributes/macAddress.ttl b/SGO/sgo/attributes/macAddress.ttl similarity index 100% rename from SGO/ogit/attributes/macAddress.ttl rename to SGO/sgo/attributes/macAddress.ttl diff --git a/SGO/ogit/attributes/maintenanceState.ttl b/SGO/sgo/attributes/maintenanceState.ttl similarity index 100% rename from SGO/ogit/attributes/maintenanceState.ttl rename to SGO/sgo/attributes/maintenanceState.ttl diff --git a/SGO/ogit/attributes/manufacturer.ttl b/SGO/sgo/attributes/manufacturer.ttl similarity index 100% rename from SGO/ogit/attributes/manufacturer.ttl rename to SGO/sgo/attributes/manufacturer.ttl diff --git a/SGO/ogit/attributes/market.ttl b/SGO/sgo/attributes/market.ttl similarity index 100% rename from SGO/ogit/attributes/market.ttl rename to SGO/sgo/attributes/market.ttl diff --git a/SGO/ogit/attributes/message.ttl b/SGO/sgo/attributes/message.ttl similarity index 100% rename from SGO/ogit/attributes/message.ttl rename to SGO/sgo/attributes/message.ttl diff --git a/SGO/ogit/attributes/middleName.ttl b/SGO/sgo/attributes/middleName.ttl similarity index 100% rename from SGO/ogit/attributes/middleName.ttl rename to SGO/sgo/attributes/middleName.ttl diff --git a/SGO/ogit/attributes/mimeType.ttl b/SGO/sgo/attributes/mimeType.ttl similarity index 100% rename from SGO/ogit/attributes/mimeType.ttl rename to SGO/sgo/attributes/mimeType.ttl diff --git a/SGO/ogit/attributes/mobilePhone.ttl b/SGO/sgo/attributes/mobilePhone.ttl similarity index 100% rename from SGO/ogit/attributes/mobilePhone.ttl rename to SGO/sgo/attributes/mobilePhone.ttl diff --git a/SGO/ogit/attributes/mode.ttl b/SGO/sgo/attributes/mode.ttl similarity index 100% rename from SGO/ogit/attributes/mode.ttl rename to SGO/sgo/attributes/mode.ttl diff --git a/SGO/ogit/attributes/model.ttl b/SGO/sgo/attributes/model.ttl similarity index 100% rename from SGO/ogit/attributes/model.ttl rename to SGO/sgo/attributes/model.ttl diff --git a/SGO/ogit/attributes/modelNumber.ttl b/SGO/sgo/attributes/modelNumber.ttl similarity index 100% rename from SGO/ogit/attributes/modelNumber.ttl rename to SGO/sgo/attributes/modelNumber.ttl diff --git a/SGO/ogit/attributes/modificationTime.ttl b/SGO/sgo/attributes/modificationTime.ttl similarity index 100% rename from SGO/ogit/attributes/modificationTime.ttl rename to SGO/sgo/attributes/modificationTime.ttl diff --git a/SGO/ogit/attributes/name.ttl b/SGO/sgo/attributes/name.ttl similarity index 100% rename from SGO/ogit/attributes/name.ttl rename to SGO/sgo/attributes/name.ttl diff --git a/SGO/ogit/attributes/negativeScore.ttl b/SGO/sgo/attributes/negativeScore.ttl similarity index 100% rename from SGO/ogit/attributes/negativeScore.ttl rename to SGO/sgo/attributes/negativeScore.ttl diff --git a/SGO/ogit/attributes/notification.ttl b/SGO/sgo/attributes/notification.ttl similarity index 100% rename from SGO/ogit/attributes/notification.ttl rename to SGO/sgo/attributes/notification.ttl diff --git a/SGO/ogit/attributes/numberOfChildren.ttl b/SGO/sgo/attributes/numberOfChildren.ttl similarity index 100% rename from SGO/ogit/attributes/numberOfChildren.ttl rename to SGO/sgo/attributes/numberOfChildren.ttl diff --git a/SGO/ogit/attributes/occurenceCount.ttl b/SGO/sgo/attributes/occurenceCount.ttl similarity index 100% rename from SGO/ogit/attributes/occurenceCount.ttl rename to SGO/sgo/attributes/occurenceCount.ttl diff --git a/SGO/ogit/attributes/officePhone.ttl b/SGO/sgo/attributes/officePhone.ttl similarity index 100% rename from SGO/ogit/attributes/officePhone.ttl rename to SGO/sgo/attributes/officePhone.ttl diff --git a/SGO/ogit/attributes/onAttribute.ttl b/SGO/sgo/attributes/onAttribute.ttl similarity index 100% rename from SGO/ogit/attributes/onAttribute.ttl rename to SGO/sgo/attributes/onAttribute.ttl diff --git a/SGO/ogit/attributes/onVertex.ttl b/SGO/sgo/attributes/onVertex.ttl similarity index 100% rename from SGO/ogit/attributes/onVertex.ttl rename to SGO/sgo/attributes/onVertex.ttl diff --git a/SGO/ogit/attributes/openedAt.ttl b/SGO/sgo/attributes/openedAt.ttl similarity index 100% rename from SGO/ogit/attributes/openedAt.ttl rename to SGO/sgo/attributes/openedAt.ttl diff --git a/SGO/ogit/attributes/operation.ttl b/SGO/sgo/attributes/operation.ttl similarity index 100% rename from SGO/ogit/attributes/operation.ttl rename to SGO/sgo/attributes/operation.ttl diff --git a/SGO/ogit/attributes/operationalStatus.ttl b/SGO/sgo/attributes/operationalStatus.ttl similarity index 100% rename from SGO/ogit/attributes/operationalStatus.ttl rename to SGO/sgo/attributes/operationalStatus.ttl diff --git a/SGO/ogit/attributes/orderedAt.ttl b/SGO/sgo/attributes/orderedAt.ttl similarity index 100% rename from SGO/ogit/attributes/orderedAt.ttl rename to SGO/sgo/attributes/orderedAt.ttl diff --git a/SGO/ogit/attributes/otherPhone.ttl b/SGO/sgo/attributes/otherPhone.ttl similarity index 100% rename from SGO/ogit/attributes/otherPhone.ttl rename to SGO/sgo/attributes/otherPhone.ttl diff --git a/SGO/ogit/attributes/parentId.ttl b/SGO/sgo/attributes/parentId.ttl similarity index 100% rename from SGO/ogit/attributes/parentId.ttl rename to SGO/sgo/attributes/parentId.ttl diff --git a/SGO/ogit/attributes/passportNumber.ttl b/SGO/sgo/attributes/passportNumber.ttl similarity index 100% rename from SGO/ogit/attributes/passportNumber.ttl rename to SGO/sgo/attributes/passportNumber.ttl diff --git a/SGO/ogit/attributes/pendingChange.ttl b/SGO/sgo/attributes/pendingChange.ttl similarity index 100% rename from SGO/ogit/attributes/pendingChange.ttl rename to SGO/sgo/attributes/pendingChange.ttl diff --git a/SGO/ogit/attributes/phone.ttl b/SGO/sgo/attributes/phone.ttl similarity index 100% rename from SGO/ogit/attributes/phone.ttl rename to SGO/sgo/attributes/phone.ttl diff --git a/SGO/ogit/attributes/placement.ttl b/SGO/sgo/attributes/placement.ttl similarity index 100% rename from SGO/ogit/attributes/placement.ttl rename to SGO/sgo/attributes/placement.ttl diff --git a/SGO/ogit/attributes/plannedFinishDate.ttl b/SGO/sgo/attributes/plannedFinishDate.ttl similarity index 100% rename from SGO/ogit/attributes/plannedFinishDate.ttl rename to SGO/sgo/attributes/plannedFinishDate.ttl diff --git a/SGO/ogit/attributes/plannedStartDate.ttl b/SGO/sgo/attributes/plannedStartDate.ttl similarity index 100% rename from SGO/ogit/attributes/plannedStartDate.ttl rename to SGO/sgo/attributes/plannedStartDate.ttl diff --git a/SGO/ogit/attributes/polarity.ttl b/SGO/sgo/attributes/polarity.ttl similarity index 100% rename from SGO/ogit/attributes/polarity.ttl rename to SGO/sgo/attributes/polarity.ttl diff --git a/SGO/ogit/attributes/position.ttl b/SGO/sgo/attributes/position.ttl similarity index 100% rename from SGO/ogit/attributes/position.ttl rename to SGO/sgo/attributes/position.ttl diff --git a/SGO/ogit/attributes/positionNumber.ttl b/SGO/sgo/attributes/positionNumber.ttl similarity index 100% rename from SGO/ogit/attributes/positionNumber.ttl rename to SGO/sgo/attributes/positionNumber.ttl diff --git a/SGO/ogit/attributes/positiveScore.ttl b/SGO/sgo/attributes/positiveScore.ttl similarity index 100% rename from SGO/ogit/attributes/positiveScore.ttl rename to SGO/sgo/attributes/positiveScore.ttl diff --git a/SGO/ogit/attributes/postalCode.ttl b/SGO/sgo/attributes/postalCode.ttl similarity index 100% rename from SGO/ogit/attributes/postalCode.ttl rename to SGO/sgo/attributes/postalCode.ttl diff --git a/SGO/ogit/attributes/powerConsumption.ttl b/SGO/sgo/attributes/powerConsumption.ttl similarity index 100% rename from SGO/ogit/attributes/powerConsumption.ttl rename to SGO/sgo/attributes/powerConsumption.ttl diff --git a/SGO/ogit/attributes/priority.ttl b/SGO/sgo/attributes/priority.ttl similarity index 100% rename from SGO/ogit/attributes/priority.ttl rename to SGO/sgo/attributes/priority.ttl diff --git a/SGO/ogit/attributes/productOrderNumber.ttl b/SGO/sgo/attributes/productOrderNumber.ttl similarity index 100% rename from SGO/ogit/attributes/productOrderNumber.ttl rename to SGO/sgo/attributes/productOrderNumber.ttl diff --git a/SGO/ogit/attributes/profession.ttl b/SGO/sgo/attributes/profession.ttl similarity index 100% rename from SGO/ogit/attributes/profession.ttl rename to SGO/sgo/attributes/profession.ttl diff --git a/SGO/ogit/attributes/project.ttl b/SGO/sgo/attributes/project.ttl similarity index 100% rename from SGO/ogit/attributes/project.ttl rename to SGO/sgo/attributes/project.ttl diff --git a/SGO/ogit/attributes/public.ttl b/SGO/sgo/attributes/public.ttl similarity index 100% rename from SGO/ogit/attributes/public.ttl rename to SGO/sgo/attributes/public.ttl diff --git a/SGO/ogit/attributes/publishedAt.ttl b/SGO/sgo/attributes/publishedAt.ttl similarity index 100% rename from SGO/ogit/attributes/publishedAt.ttl rename to SGO/sgo/attributes/publishedAt.ttl diff --git a/SGO/ogit/attributes/purchaseDate.ttl b/SGO/sgo/attributes/purchaseDate.ttl similarity index 100% rename from SGO/ogit/attributes/purchaseDate.ttl rename to SGO/sgo/attributes/purchaseDate.ttl diff --git a/SGO/ogit/attributes/purchasedAt.ttl b/SGO/sgo/attributes/purchasedAt.ttl similarity index 100% rename from SGO/ogit/attributes/purchasedAt.ttl rename to SGO/sgo/attributes/purchasedAt.ttl diff --git a/SGO/ogit/attributes/question.ttl b/SGO/sgo/attributes/question.ttl similarity index 100% rename from SGO/ogit/attributes/question.ttl rename to SGO/sgo/attributes/question.ttl diff --git a/SGO/ogit/attributes/range.ttl b/SGO/sgo/attributes/range.ttl similarity index 100% rename from SGO/ogit/attributes/range.ttl rename to SGO/sgo/attributes/range.ttl diff --git a/SGO/ogit/attributes/rank.ttl b/SGO/sgo/attributes/rank.ttl similarity index 100% rename from SGO/ogit/attributes/rank.ttl rename to SGO/sgo/attributes/rank.ttl diff --git a/SGO/ogit/attributes/reason.ttl b/SGO/sgo/attributes/reason.ttl similarity index 100% rename from SGO/ogit/attributes/reason.ttl rename to SGO/sgo/attributes/reason.ttl diff --git a/SGO/ogit/attributes/recipients.ttl b/SGO/sgo/attributes/recipients.ttl similarity index 100% rename from SGO/ogit/attributes/recipients.ttl rename to SGO/sgo/attributes/recipients.ttl diff --git a/SGO/ogit/attributes/religion.ttl b/SGO/sgo/attributes/religion.ttl similarity index 100% rename from SGO/ogit/attributes/religion.ttl rename to SGO/sgo/attributes/religion.ttl diff --git a/SGO/ogit/attributes/reportedAt.ttl b/SGO/sgo/attributes/reportedAt.ttl similarity index 100% rename from SGO/ogit/attributes/reportedAt.ttl rename to SGO/sgo/attributes/reportedAt.ttl diff --git a/SGO/ogit/attributes/reportedBy.ttl b/SGO/sgo/attributes/reportedBy.ttl similarity index 100% rename from SGO/ogit/attributes/reportedBy.ttl rename to SGO/sgo/attributes/reportedBy.ttl diff --git a/SGO/ogit/attributes/resource.ttl b/SGO/sgo/attributes/resource.ttl similarity index 100% rename from SGO/ogit/attributes/resource.ttl rename to SGO/sgo/attributes/resource.ttl diff --git a/SGO/ogit/attributes/response.ttl b/SGO/sgo/attributes/response.ttl similarity index 100% rename from SGO/ogit/attributes/response.ttl rename to SGO/sgo/attributes/response.ttl diff --git a/SGO/ogit/attributes/reviewedAt.ttl b/SGO/sgo/attributes/reviewedAt.ttl similarity index 100% rename from SGO/ogit/attributes/reviewedAt.ttl rename to SGO/sgo/attributes/reviewedAt.ttl diff --git a/SGO/ogit/attributes/reviewedBy.ttl b/SGO/sgo/attributes/reviewedBy.ttl similarity index 100% rename from SGO/ogit/attributes/reviewedBy.ttl rename to SGO/sgo/attributes/reviewedBy.ttl diff --git a/SGO/ogit/attributes/revision.ttl b/SGO/sgo/attributes/revision.ttl similarity index 100% rename from SGO/ogit/attributes/revision.ttl rename to SGO/sgo/attributes/revision.ttl diff --git a/SGO/ogit/attributes/revokedAt.ttl b/SGO/sgo/attributes/revokedAt.ttl similarity index 100% rename from SGO/ogit/attributes/revokedAt.ttl rename to SGO/sgo/attributes/revokedAt.ttl diff --git a/SGO/ogit/attributes/risk.ttl b/SGO/sgo/attributes/risk.ttl similarity index 100% rename from SGO/ogit/attributes/risk.ttl rename to SGO/sgo/attributes/risk.ttl diff --git a/SGO/ogit/attributes/schedule.ttl b/SGO/sgo/attributes/schedule.ttl similarity index 100% rename from SGO/ogit/attributes/schedule.ttl rename to SGO/sgo/attributes/schedule.ttl diff --git a/SGO/ogit/attributes/section.ttl b/SGO/sgo/attributes/section.ttl similarity index 100% rename from SGO/ogit/attributes/section.ttl rename to SGO/sgo/attributes/section.ttl diff --git a/SGO/ogit/attributes/securityClass.ttl b/SGO/sgo/attributes/securityClass.ttl similarity index 100% rename from SGO/ogit/attributes/securityClass.ttl rename to SGO/sgo/attributes/securityClass.ttl diff --git a/SGO/ogit/attributes/serialNumber.ttl b/SGO/sgo/attributes/serialNumber.ttl similarity index 100% rename from SGO/ogit/attributes/serialNumber.ttl rename to SGO/sgo/attributes/serialNumber.ttl diff --git a/SGO/ogit/attributes/serviceContract.ttl b/SGO/sgo/attributes/serviceContract.ttl similarity index 100% rename from SGO/ogit/attributes/serviceContract.ttl rename to SGO/sgo/attributes/serviceContract.ttl diff --git a/SGO/ogit/attributes/severity.ttl b/SGO/sgo/attributes/severity.ttl similarity index 100% rename from SGO/ogit/attributes/severity.ttl rename to SGO/sgo/attributes/severity.ttl diff --git a/SGO/ogit/attributes/sharedWith.ttl b/SGO/sgo/attributes/sharedWith.ttl similarity index 100% rename from SGO/ogit/attributes/sharedWith.ttl rename to SGO/sgo/attributes/sharedWith.ttl diff --git a/SGO/ogit/attributes/shortDescription.ttl b/SGO/sgo/attributes/shortDescription.ttl similarity index 100% rename from SGO/ogit/attributes/shortDescription.ttl rename to SGO/sgo/attributes/shortDescription.ttl diff --git a/SGO/ogit/attributes/size.ttl b/SGO/sgo/attributes/size.ttl similarity index 100% rename from SGO/ogit/attributes/size.ttl rename to SGO/sgo/attributes/size.ttl diff --git a/SGO/ogit/attributes/source.ttl b/SGO/sgo/attributes/source.ttl similarity index 100% rename from SGO/ogit/attributes/source.ttl rename to SGO/sgo/attributes/source.ttl diff --git a/SGO/ogit/attributes/sourceId.ttl b/SGO/sgo/attributes/sourceId.ttl similarity index 100% rename from SGO/ogit/attributes/sourceId.ttl rename to SGO/sgo/attributes/sourceId.ttl diff --git a/SGO/ogit/attributes/sourceTable.ttl b/SGO/sgo/attributes/sourceTable.ttl similarity index 100% rename from SGO/ogit/attributes/sourceTable.ttl rename to SGO/sgo/attributes/sourceTable.ttl diff --git a/SGO/ogit/attributes/soxClass.ttl b/SGO/sgo/attributes/soxClass.ttl similarity index 100% rename from SGO/ogit/attributes/soxClass.ttl rename to SGO/sgo/attributes/soxClass.ttl diff --git a/SGO/ogit/attributes/startOfWarranty.ttl b/SGO/sgo/attributes/startOfWarranty.ttl similarity index 100% rename from SGO/ogit/attributes/startOfWarranty.ttl rename to SGO/sgo/attributes/startOfWarranty.ttl diff --git a/SGO/ogit/attributes/startedAt.ttl b/SGO/sgo/attributes/startedAt.ttl similarity index 100% rename from SGO/ogit/attributes/startedAt.ttl rename to SGO/sgo/attributes/startedAt.ttl diff --git a/SGO/ogit/attributes/status.ttl b/SGO/sgo/attributes/status.ttl similarity index 100% rename from SGO/ogit/attributes/status.ttl rename to SGO/sgo/attributes/status.ttl diff --git a/SGO/ogit/attributes/streetAddress.ttl b/SGO/sgo/attributes/streetAddress.ttl similarity index 100% rename from SGO/ogit/attributes/streetAddress.ttl rename to SGO/sgo/attributes/streetAddress.ttl diff --git a/SGO/ogit/attributes/subCategory.ttl b/SGO/sgo/attributes/subCategory.ttl similarity index 100% rename from SGO/ogit/attributes/subCategory.ttl rename to SGO/sgo/attributes/subCategory.ttl diff --git a/SGO/ogit/attributes/subType.ttl b/SGO/sgo/attributes/subType.ttl similarity index 100% rename from SGO/ogit/attributes/subType.ttl rename to SGO/sgo/attributes/subType.ttl diff --git a/SGO/ogit/attributes/subject.ttl b/SGO/sgo/attributes/subject.ttl similarity index 100% rename from SGO/ogit/attributes/subject.ttl rename to SGO/sgo/attributes/subject.ttl diff --git a/SGO/ogit/attributes/summary.ttl b/SGO/sgo/attributes/summary.ttl similarity index 100% rename from SGO/ogit/attributes/summary.ttl rename to SGO/sgo/attributes/summary.ttl diff --git a/SGO/ogit/attributes/synonyms.ttl b/SGO/sgo/attributes/synonyms.ttl similarity index 100% rename from SGO/ogit/attributes/synonyms.ttl rename to SGO/sgo/attributes/synonyms.ttl diff --git a/SGO/ogit/attributes/tags.ttl b/SGO/sgo/attributes/tags.ttl similarity index 100% rename from SGO/ogit/attributes/tags.ttl rename to SGO/sgo/attributes/tags.ttl diff --git a/SGO/ogit/attributes/taskLog.ttl b/SGO/sgo/attributes/taskLog.ttl similarity index 100% rename from SGO/ogit/attributes/taskLog.ttl rename to SGO/sgo/attributes/taskLog.ttl diff --git a/SGO/ogit/attributes/tenantId.ttl b/SGO/sgo/attributes/tenantId.ttl similarity index 100% rename from SGO/ogit/attributes/tenantId.ttl rename to SGO/sgo/attributes/tenantId.ttl diff --git a/SGO/ogit/attributes/timeZone.ttl b/SGO/sgo/attributes/timeZone.ttl similarity index 100% rename from SGO/ogit/attributes/timeZone.ttl rename to SGO/sgo/attributes/timeZone.ttl diff --git a/SGO/ogit/attributes/timestamp.ttl b/SGO/sgo/attributes/timestamp.ttl similarity index 100% rename from SGO/ogit/attributes/timestamp.ttl rename to SGO/sgo/attributes/timestamp.ttl diff --git a/SGO/ogit/attributes/title.ttl b/SGO/sgo/attributes/title.ttl similarity index 100% rename from SGO/ogit/attributes/title.ttl rename to SGO/sgo/attributes/title.ttl diff --git a/SGO/ogit/attributes/token.ttl b/SGO/sgo/attributes/token.ttl similarity index 100% rename from SGO/ogit/attributes/token.ttl rename to SGO/sgo/attributes/token.ttl diff --git a/SGO/ogit/attributes/tone.ttl b/SGO/sgo/attributes/tone.ttl similarity index 100% rename from SGO/ogit/attributes/tone.ttl rename to SGO/sgo/attributes/tone.ttl diff --git a/SGO/ogit/attributes/type.ttl b/SGO/sgo/attributes/type.ttl similarity index 100% rename from SGO/ogit/attributes/type.ttl rename to SGO/sgo/attributes/type.ttl diff --git a/SGO/ogit/attributes/unit.ttl b/SGO/sgo/attributes/unit.ttl similarity index 100% rename from SGO/ogit/attributes/unit.ttl rename to SGO/sgo/attributes/unit.ttl diff --git a/SGO/ogit/attributes/unitDescription.ttl b/SGO/sgo/attributes/unitDescription.ttl similarity index 100% rename from SGO/ogit/attributes/unitDescription.ttl rename to SGO/sgo/attributes/unitDescription.ttl diff --git a/SGO/ogit/attributes/updateCount.ttl b/SGO/sgo/attributes/updateCount.ttl similarity index 100% rename from SGO/ogit/attributes/updateCount.ttl rename to SGO/sgo/attributes/updateCount.ttl diff --git a/SGO/ogit/attributes/upperLimit.ttl b/SGO/sgo/attributes/upperLimit.ttl similarity index 100% rename from SGO/ogit/attributes/upperLimit.ttl rename to SGO/sgo/attributes/upperLimit.ttl diff --git a/SGO/ogit/attributes/urgency.ttl b/SGO/sgo/attributes/urgency.ttl similarity index 100% rename from SGO/ogit/attributes/urgency.ttl rename to SGO/sgo/attributes/urgency.ttl diff --git a/SGO/ogit/attributes/uri.ttl b/SGO/sgo/attributes/uri.ttl similarity index 100% rename from SGO/ogit/attributes/uri.ttl rename to SGO/sgo/attributes/uri.ttl diff --git a/SGO/ogit/attributes/url.ttl b/SGO/sgo/attributes/url.ttl similarity index 100% rename from SGO/ogit/attributes/url.ttl rename to SGO/sgo/attributes/url.ttl diff --git a/SGO/ogit/attributes/validFrom.ttl b/SGO/sgo/attributes/validFrom.ttl similarity index 100% rename from SGO/ogit/attributes/validFrom.ttl rename to SGO/sgo/attributes/validFrom.ttl diff --git a/SGO/ogit/attributes/validTo.ttl b/SGO/sgo/attributes/validTo.ttl similarity index 100% rename from SGO/ogit/attributes/validTo.ttl rename to SGO/sgo/attributes/validTo.ttl diff --git a/SGO/ogit/attributes/value.ttl b/SGO/sgo/attributes/value.ttl similarity index 100% rename from SGO/ogit/attributes/value.ttl rename to SGO/sgo/attributes/value.ttl diff --git a/SGO/ogit/attributes/valueDate.ttl b/SGO/sgo/attributes/valueDate.ttl similarity index 100% rename from SGO/ogit/attributes/valueDate.ttl rename to SGO/sgo/attributes/valueDate.ttl diff --git a/SGO/ogit/attributes/values.ttl b/SGO/sgo/attributes/values.ttl similarity index 100% rename from SGO/ogit/attributes/values.ttl rename to SGO/sgo/attributes/values.ttl diff --git a/SGO/ogit/attributes/vendor.ttl b/SGO/sgo/attributes/vendor.ttl similarity index 100% rename from SGO/ogit/attributes/vendor.ttl rename to SGO/sgo/attributes/vendor.ttl diff --git a/SGO/ogit/attributes/version.ttl b/SGO/sgo/attributes/version.ttl similarity index 100% rename from SGO/ogit/attributes/version.ttl rename to SGO/sgo/attributes/version.ttl diff --git a/SGO/ogit/attributes/webPage.ttl b/SGO/sgo/attributes/webPage.ttl similarity index 100% rename from SGO/ogit/attributes/webPage.ttl rename to SGO/sgo/attributes/webPage.ttl diff --git a/SGO/ogit/attributes/weight.ttl b/SGO/sgo/attributes/weight.ttl similarity index 100% rename from SGO/ogit/attributes/weight.ttl rename to SGO/sgo/attributes/weight.ttl diff --git a/SGO/ogit/attributes/yearOfBirth.ttl b/SGO/sgo/attributes/yearOfBirth.ttl similarity index 100% rename from SGO/ogit/attributes/yearOfBirth.ttl rename to SGO/sgo/attributes/yearOfBirth.ttl diff --git a/SGO/ogit/attributes/zipCode.ttl b/SGO/sgo/attributes/zipCode.ttl similarity index 100% rename from SGO/ogit/attributes/zipCode.ttl rename to SGO/sgo/attributes/zipCode.ttl diff --git a/SGO/ogit/entities/Account.ttl b/SGO/sgo/entities/Account.ttl similarity index 100% rename from SGO/ogit/entities/Account.ttl rename to SGO/sgo/entities/Account.ttl diff --git a/SGO/ogit/entities/Agent.ttl b/SGO/sgo/entities/Agent.ttl similarity index 100% rename from SGO/ogit/entities/Agent.ttl rename to SGO/sgo/entities/Agent.ttl diff --git a/SGO/ogit/entities/Alert.ttl b/SGO/sgo/entities/Alert.ttl similarity index 100% rename from SGO/ogit/entities/Alert.ttl rename to SGO/sgo/entities/Alert.ttl diff --git a/SGO/ogit/entities/Annotation.ttl b/SGO/sgo/entities/Annotation.ttl similarity index 100% rename from SGO/ogit/entities/Annotation.ttl rename to SGO/sgo/entities/Annotation.ttl diff --git a/SGO/ogit/entities/Asset.ttl b/SGO/sgo/entities/Asset.ttl similarity index 100% rename from SGO/ogit/entities/Asset.ttl rename to SGO/sgo/entities/Asset.ttl diff --git a/SGO/ogit/entities/Attachment.ttl b/SGO/sgo/entities/Attachment.ttl similarity index 100% rename from SGO/ogit/entities/Attachment.ttl rename to SGO/sgo/entities/Attachment.ttl diff --git a/SGO/ogit/entities/Blob.ttl b/SGO/sgo/entities/Blob.ttl similarity index 100% rename from SGO/ogit/entities/Blob.ttl rename to SGO/sgo/entities/Blob.ttl diff --git a/SGO/ogit/entities/Catalog.ttl b/SGO/sgo/entities/Catalog.ttl similarity index 100% rename from SGO/ogit/entities/Catalog.ttl rename to SGO/sgo/entities/Catalog.ttl diff --git a/SGO/ogit/entities/CatalogItem.ttl b/SGO/sgo/entities/CatalogItem.ttl similarity index 100% rename from SGO/ogit/entities/CatalogItem.ttl rename to SGO/sgo/entities/CatalogItem.ttl diff --git a/SGO/ogit/entities/Category.ttl b/SGO/sgo/entities/Category.ttl similarity index 100% rename from SGO/ogit/entities/Category.ttl rename to SGO/sgo/entities/Category.ttl diff --git a/SGO/ogit/entities/Certificate.ttl b/SGO/sgo/entities/Certificate.ttl similarity index 100% rename from SGO/ogit/entities/Certificate.ttl rename to SGO/sgo/entities/Certificate.ttl diff --git a/SGO/ogit/entities/Comment.ttl b/SGO/sgo/entities/Comment.ttl similarity index 100% rename from SGO/ogit/entities/Comment.ttl rename to SGO/sgo/entities/Comment.ttl diff --git a/SGO/ogit/entities/Configuration.ttl b/SGO/sgo/entities/Configuration.ttl similarity index 100% rename from SGO/ogit/entities/Configuration.ttl rename to SGO/sgo/entities/Configuration.ttl diff --git a/SGO/ogit/entities/ConfigurationItem.ttl b/SGO/sgo/entities/ConfigurationItem.ttl similarity index 100% rename from SGO/ogit/entities/ConfigurationItem.ttl rename to SGO/sgo/entities/ConfigurationItem.ttl diff --git a/SGO/ogit/entities/Contract.ttl b/SGO/sgo/entities/Contract.ttl similarity index 100% rename from SGO/ogit/entities/Contract.ttl rename to SGO/sgo/entities/Contract.ttl diff --git a/SGO/ogit/entities/Course.ttl b/SGO/sgo/entities/Course.ttl similarity index 100% rename from SGO/ogit/entities/Course.ttl rename to SGO/sgo/entities/Course.ttl diff --git a/SGO/ogit/entities/CustomApplicationData.ttl b/SGO/sgo/entities/CustomApplicationData.ttl similarity index 100% rename from SGO/ogit/entities/CustomApplicationData.ttl rename to SGO/sgo/entities/CustomApplicationData.ttl diff --git a/SGO/ogit/entities/Device.ttl b/SGO/sgo/entities/Device.ttl similarity index 100% rename from SGO/ogit/entities/Device.ttl rename to SGO/sgo/entities/Device.ttl diff --git a/SGO/ogit/entities/Email.ttl b/SGO/sgo/entities/Email.ttl similarity index 100% rename from SGO/ogit/entities/Email.ttl rename to SGO/sgo/entities/Email.ttl diff --git a/SGO/ogit/entities/Environment.ttl b/SGO/sgo/entities/Environment.ttl similarity index 100% rename from SGO/ogit/entities/Environment.ttl rename to SGO/sgo/entities/Environment.ttl diff --git a/SGO/ogit/entities/Equivalence.ttl b/SGO/sgo/entities/Equivalence.ttl similarity index 100% rename from SGO/ogit/entities/Equivalence.ttl rename to SGO/sgo/entities/Equivalence.ttl diff --git a/SGO/ogit/entities/Event.ttl b/SGO/sgo/entities/Event.ttl similarity index 100% rename from SGO/ogit/entities/Event.ttl rename to SGO/sgo/entities/Event.ttl diff --git a/SGO/ogit/entities/Feature.ttl b/SGO/sgo/entities/Feature.ttl similarity index 100% rename from SGO/ogit/entities/Feature.ttl rename to SGO/sgo/entities/Feature.ttl diff --git a/SGO/ogit/entities/Hyperedge.ttl b/SGO/sgo/entities/Hyperedge.ttl similarity index 100% rename from SGO/ogit/entities/Hyperedge.ttl rename to SGO/sgo/entities/Hyperedge.ttl diff --git a/SGO/ogit/entities/Hyperlink.ttl b/SGO/sgo/entities/Hyperlink.ttl similarity index 100% rename from SGO/ogit/entities/Hyperlink.ttl rename to SGO/sgo/entities/Hyperlink.ttl diff --git a/SGO/ogit/entities/Installation.ttl b/SGO/sgo/entities/Installation.ttl similarity index 100% rename from SGO/ogit/entities/Installation.ttl rename to SGO/sgo/entities/Installation.ttl diff --git a/SGO/ogit/entities/Intent.ttl b/SGO/sgo/entities/Intent.ttl similarity index 100% rename from SGO/ogit/entities/Intent.ttl rename to SGO/sgo/entities/Intent.ttl diff --git a/SGO/ogit/entities/Keyword.ttl b/SGO/sgo/entities/Keyword.ttl similarity index 100% rename from SGO/ogit/entities/Keyword.ttl rename to SGO/sgo/entities/Keyword.ttl diff --git a/SGO/ogit/entities/License.ttl b/SGO/sgo/entities/License.ttl similarity index 100% rename from SGO/ogit/entities/License.ttl rename to SGO/sgo/entities/License.ttl diff --git a/SGO/ogit/entities/LicenseRequest.ttl b/SGO/sgo/entities/LicenseRequest.ttl similarity index 100% rename from SGO/ogit/entities/LicenseRequest.ttl rename to SGO/sgo/entities/LicenseRequest.ttl diff --git a/SGO/ogit/entities/LicenseToken.ttl b/SGO/sgo/entities/LicenseToken.ttl similarity index 100% rename from SGO/ogit/entities/LicenseToken.ttl rename to SGO/sgo/entities/LicenseToken.ttl diff --git a/SGO/ogit/entities/Location.ttl b/SGO/sgo/entities/Location.ttl similarity index 100% rename from SGO/ogit/entities/Location.ttl rename to SGO/sgo/entities/Location.ttl diff --git a/SGO/ogit/entities/Note.ttl b/SGO/sgo/entities/Note.ttl similarity index 100% rename from SGO/ogit/entities/Note.ttl rename to SGO/sgo/entities/Note.ttl diff --git a/SGO/ogit/entities/Notification.ttl b/SGO/sgo/entities/Notification.ttl similarity index 100% rename from SGO/ogit/entities/Notification.ttl rename to SGO/sgo/entities/Notification.ttl diff --git a/SGO/ogit/entities/Offer.ttl b/SGO/sgo/entities/Offer.ttl similarity index 100% rename from SGO/ogit/entities/Offer.ttl rename to SGO/sgo/entities/Offer.ttl diff --git a/SGO/ogit/entities/Organization.ttl b/SGO/sgo/entities/Organization.ttl similarity index 100% rename from SGO/ogit/entities/Organization.ttl rename to SGO/sgo/entities/Organization.ttl diff --git a/SGO/ogit/entities/Parameter.ttl b/SGO/sgo/entities/Parameter.ttl similarity index 100% rename from SGO/ogit/entities/Parameter.ttl rename to SGO/sgo/entities/Parameter.ttl diff --git a/SGO/ogit/entities/ParameterType.ttl b/SGO/sgo/entities/ParameterType.ttl similarity index 100% rename from SGO/ogit/entities/ParameterType.ttl rename to SGO/sgo/entities/ParameterType.ttl diff --git a/SGO/ogit/entities/Penalty.ttl b/SGO/sgo/entities/Penalty.ttl similarity index 100% rename from SGO/ogit/entities/Penalty.ttl rename to SGO/sgo/entities/Penalty.ttl diff --git a/SGO/ogit/entities/Person.ttl b/SGO/sgo/entities/Person.ttl similarity index 100% rename from SGO/ogit/entities/Person.ttl rename to SGO/sgo/entities/Person.ttl diff --git a/SGO/ogit/entities/Policy.ttl b/SGO/sgo/entities/Policy.ttl similarity index 100% rename from SGO/ogit/entities/Policy.ttl rename to SGO/sgo/entities/Policy.ttl diff --git a/SGO/ogit/entities/Product.ttl b/SGO/sgo/entities/Product.ttl similarity index 100% rename from SGO/ogit/entities/Product.ttl rename to SGO/sgo/entities/Product.ttl diff --git a/SGO/ogit/entities/Question.ttl b/SGO/sgo/entities/Question.ttl similarity index 100% rename from SGO/ogit/entities/Question.ttl rename to SGO/sgo/entities/Question.ttl diff --git a/SGO/ogit/entities/Rating.ttl b/SGO/sgo/entities/Rating.ttl similarity index 100% rename from SGO/ogit/entities/Rating.ttl rename to SGO/sgo/entities/Rating.ttl diff --git a/SGO/ogit/entities/Region.ttl b/SGO/sgo/entities/Region.ttl similarity index 100% rename from SGO/ogit/entities/Region.ttl rename to SGO/sgo/entities/Region.ttl diff --git a/SGO/ogit/entities/Relevance.ttl b/SGO/sgo/entities/Relevance.ttl similarity index 100% rename from SGO/ogit/entities/Relevance.ttl rename to SGO/sgo/entities/Relevance.ttl diff --git a/SGO/ogit/entities/ReportedStatistic.ttl b/SGO/sgo/entities/ReportedStatistic.ttl similarity index 100% rename from SGO/ogit/entities/ReportedStatistic.ttl rename to SGO/sgo/entities/ReportedStatistic.ttl diff --git a/SGO/ogit/entities/Requirements.ttl b/SGO/sgo/entities/Requirements.ttl similarity index 100% rename from SGO/ogit/entities/Requirements.ttl rename to SGO/sgo/entities/Requirements.ttl diff --git a/SGO/ogit/entities/Role.ttl b/SGO/sgo/entities/Role.ttl similarity index 100% rename from SGO/ogit/entities/Role.ttl rename to SGO/sgo/entities/Role.ttl diff --git a/SGO/ogit/entities/RoleAssignment.ttl b/SGO/sgo/entities/RoleAssignment.ttl similarity index 100% rename from SGO/ogit/entities/RoleAssignment.ttl rename to SGO/sgo/entities/RoleAssignment.ttl diff --git a/SGO/ogit/entities/Schema.ttl b/SGO/sgo/entities/Schema.ttl similarity index 100% rename from SGO/ogit/entities/Schema.ttl rename to SGO/sgo/entities/Schema.ttl diff --git a/SGO/ogit/entities/Series.ttl b/SGO/sgo/entities/Series.ttl similarity index 100% rename from SGO/ogit/entities/Series.ttl rename to SGO/sgo/entities/Series.ttl diff --git a/SGO/ogit/entities/Status.ttl b/SGO/sgo/entities/Status.ttl similarity index 100% rename from SGO/ogit/entities/Status.ttl rename to SGO/sgo/entities/Status.ttl diff --git a/SGO/ogit/entities/Subscription.ttl b/SGO/sgo/entities/Subscription.ttl similarity index 100% rename from SGO/ogit/entities/Subscription.ttl rename to SGO/sgo/entities/Subscription.ttl diff --git a/SGO/ogit/entities/Tag.ttl b/SGO/sgo/entities/Tag.ttl similarity index 100% rename from SGO/ogit/entities/Tag.ttl rename to SGO/sgo/entities/Tag.ttl diff --git a/SGO/ogit/entities/Task.ttl b/SGO/sgo/entities/Task.ttl similarity index 100% rename from SGO/ogit/entities/Task.ttl rename to SGO/sgo/entities/Task.ttl diff --git a/SGO/ogit/entities/TaskList.ttl b/SGO/sgo/entities/TaskList.ttl similarity index 100% rename from SGO/ogit/entities/TaskList.ttl rename to SGO/sgo/entities/TaskList.ttl diff --git a/SGO/ogit/entities/TermsAndConditions.ttl b/SGO/sgo/entities/TermsAndConditions.ttl similarity index 100% rename from SGO/ogit/entities/TermsAndConditions.ttl rename to SGO/sgo/entities/TermsAndConditions.ttl diff --git a/SGO/ogit/entities/Timeseries.ttl b/SGO/sgo/entities/Timeseries.ttl similarity index 100% rename from SGO/ogit/entities/Timeseries.ttl rename to SGO/sgo/entities/Timeseries.ttl diff --git a/SGO/ogit/entities/Tone.ttl b/SGO/sgo/entities/Tone.ttl similarity index 100% rename from SGO/ogit/entities/Tone.ttl rename to SGO/sgo/entities/Tone.ttl diff --git a/SGO/ogit/entities/Vcard.ttl b/SGO/sgo/entities/Vcard.ttl similarity index 100% rename from SGO/ogit/entities/Vcard.ttl rename to SGO/sgo/entities/Vcard.ttl diff --git a/SGO/ogit/entities/VersioningData.ttl b/SGO/sgo/entities/VersioningData.ttl similarity index 100% rename from SGO/ogit/entities/VersioningData.ttl rename to SGO/sgo/entities/VersioningData.ttl diff --git a/SGO/ogit/verbs/accepts.ttl b/SGO/sgo/verbs/accepts.ttl similarity index 100% rename from SGO/ogit/verbs/accepts.ttl rename to SGO/sgo/verbs/accepts.ttl diff --git a/SGO/ogit/verbs/activates.ttl b/SGO/sgo/verbs/activates.ttl similarity index 100% rename from SGO/ogit/verbs/activates.ttl rename to SGO/sgo/verbs/activates.ttl diff --git a/SGO/ogit/verbs/actsOnBehalfOf.ttl b/SGO/sgo/verbs/actsOnBehalfOf.ttl similarity index 100% rename from SGO/ogit/verbs/actsOnBehalfOf.ttl rename to SGO/sgo/verbs/actsOnBehalfOf.ttl diff --git a/SGO/ogit/verbs/administratorInInsolvencyOf.ttl b/SGO/sgo/verbs/administratorInInsolvencyOf.ttl similarity index 100% rename from SGO/ogit/verbs/administratorInInsolvencyOf.ttl rename to SGO/sgo/verbs/administratorInInsolvencyOf.ttl diff --git a/SGO/ogit/verbs/administratorOf.ttl b/SGO/sgo/verbs/administratorOf.ttl similarity index 100% rename from SGO/ogit/verbs/administratorOf.ttl rename to SGO/sgo/verbs/administratorOf.ttl diff --git a/SGO/ogit/verbs/affects.ttl b/SGO/sgo/verbs/affects.ttl similarity index 100% rename from SGO/ogit/verbs/affects.ttl rename to SGO/sgo/verbs/affects.ttl diff --git a/SGO/ogit/verbs/affiliateOf.ttl b/SGO/sgo/verbs/affiliateOf.ttl similarity index 100% rename from SGO/ogit/verbs/affiliateOf.ttl rename to SGO/sgo/verbs/affiliateOf.ttl diff --git a/SGO/ogit/verbs/alerts.ttl b/SGO/sgo/verbs/alerts.ttl similarity index 100% rename from SGO/ogit/verbs/alerts.ttl rename to SGO/sgo/verbs/alerts.ttl diff --git a/SGO/ogit/verbs/approves.ttl b/SGO/sgo/verbs/approves.ttl similarity index 100% rename from SGO/ogit/verbs/approves.ttl rename to SGO/sgo/verbs/approves.ttl diff --git a/SGO/ogit/verbs/assignedTo.ttl b/SGO/sgo/verbs/assignedTo.ttl similarity index 100% rename from SGO/ogit/verbs/assignedTo.ttl rename to SGO/sgo/verbs/assignedTo.ttl diff --git a/SGO/ogit/verbs/associates.ttl b/SGO/sgo/verbs/associates.ttl similarity index 100% rename from SGO/ogit/verbs/associates.ttl rename to SGO/sgo/verbs/associates.ttl diff --git a/SGO/ogit/verbs/assumes.ttl b/SGO/sgo/verbs/assumes.ttl similarity index 100% rename from SGO/ogit/verbs/assumes.ttl rename to SGO/sgo/verbs/assumes.ttl diff --git a/SGO/ogit/verbs/auditCommitteeMemberOf.ttl b/SGO/sgo/verbs/auditCommitteeMemberOf.ttl similarity index 100% rename from SGO/ogit/verbs/auditCommitteeMemberOf.ttl rename to SGO/sgo/verbs/auditCommitteeMemberOf.ttl diff --git a/SGO/ogit/verbs/auditorOf.ttl b/SGO/sgo/verbs/auditorOf.ttl similarity index 100% rename from SGO/ogit/verbs/auditorOf.ttl rename to SGO/sgo/verbs/auditorOf.ttl diff --git a/SGO/ogit/verbs/availableIn.ttl b/SGO/sgo/verbs/availableIn.ttl similarity index 100% rename from SGO/ogit/verbs/availableIn.ttl rename to SGO/sgo/verbs/availableIn.ttl diff --git a/SGO/ogit/verbs/belongs.ttl b/SGO/sgo/verbs/belongs.ttl similarity index 100% rename from SGO/ogit/verbs/belongs.ttl rename to SGO/sgo/verbs/belongs.ttl diff --git a/SGO/ogit/verbs/beneficialOwnerOf.ttl b/SGO/sgo/verbs/beneficialOwnerOf.ttl similarity index 100% rename from SGO/ogit/verbs/beneficialOwnerOf.ttl rename to SGO/sgo/verbs/beneficialOwnerOf.ttl diff --git a/SGO/ogit/verbs/beneficiaryOf.ttl b/SGO/sgo/verbs/beneficiaryOf.ttl similarity index 100% rename from SGO/ogit/verbs/beneficiaryOf.ttl rename to SGO/sgo/verbs/beneficiaryOf.ttl diff --git a/SGO/ogit/verbs/bills.ttl b/SGO/sgo/verbs/bills.ttl similarity index 100% rename from SGO/ogit/verbs/bills.ttl rename to SGO/sgo/verbs/bills.ttl diff --git a/SGO/ogit/verbs/boardMemberOf.ttl b/SGO/sgo/verbs/boardMemberOf.ttl similarity index 100% rename from SGO/ogit/verbs/boardMemberOf.ttl rename to SGO/sgo/verbs/boardMemberOf.ttl diff --git a/SGO/ogit/verbs/bornIn.ttl b/SGO/sgo/verbs/bornIn.ttl similarity index 100% rename from SGO/ogit/verbs/bornIn.ttl rename to SGO/sgo/verbs/bornIn.ttl diff --git a/SGO/ogit/verbs/calls.ttl b/SGO/sgo/verbs/calls.ttl similarity index 100% rename from SGO/ogit/verbs/calls.ttl rename to SGO/sgo/verbs/calls.ttl diff --git a/SGO/ogit/verbs/capitalOf.ttl b/SGO/sgo/verbs/capitalOf.ttl similarity index 100% rename from SGO/ogit/verbs/capitalOf.ttl rename to SGO/sgo/verbs/capitalOf.ttl diff --git a/SGO/ogit/verbs/causes.ttl b/SGO/sgo/verbs/causes.ttl similarity index 100% rename from SGO/ogit/verbs/causes.ttl rename to SGO/sgo/verbs/causes.ttl diff --git a/SGO/ogit/verbs/centerOf.ttl b/SGO/sgo/verbs/centerOf.ttl similarity index 100% rename from SGO/ogit/verbs/centerOf.ttl rename to SGO/sgo/verbs/centerOf.ttl diff --git a/SGO/ogit/verbs/chairmanOf.ttl b/SGO/sgo/verbs/chairmanOf.ttl similarity index 100% rename from SGO/ogit/verbs/chairmanOf.ttl rename to SGO/sgo/verbs/chairmanOf.ttl diff --git a/SGO/ogit/verbs/closes.ttl b/SGO/sgo/verbs/closes.ttl similarity index 100% rename from SGO/ogit/verbs/closes.ttl rename to SGO/sgo/verbs/closes.ttl diff --git a/SGO/ogit/verbs/closest.ttl b/SGO/sgo/verbs/closest.ttl similarity index 100% rename from SGO/ogit/verbs/closest.ttl rename to SGO/sgo/verbs/closest.ttl diff --git a/SGO/ogit/verbs/communicatesWith.ttl b/SGO/sgo/verbs/communicatesWith.ttl similarity index 100% rename from SGO/ogit/verbs/communicatesWith.ttl rename to SGO/sgo/verbs/communicatesWith.ttl diff --git a/SGO/ogit/verbs/competes.ttl b/SGO/sgo/verbs/competes.ttl similarity index 100% rename from SGO/ogit/verbs/competes.ttl rename to SGO/sgo/verbs/competes.ttl diff --git a/SGO/ogit/verbs/complianceOfficerOf.ttl b/SGO/sgo/verbs/complianceOfficerOf.ttl similarity index 100% rename from SGO/ogit/verbs/complianceOfficerOf.ttl rename to SGO/sgo/verbs/complianceOfficerOf.ttl diff --git a/SGO/ogit/verbs/complies.ttl b/SGO/sgo/verbs/complies.ttl similarity index 100% rename from SGO/ogit/verbs/complies.ttl rename to SGO/sgo/verbs/complies.ttl diff --git a/SGO/ogit/verbs/concludes.ttl b/SGO/sgo/verbs/concludes.ttl similarity index 100% rename from SGO/ogit/verbs/concludes.ttl rename to SGO/sgo/verbs/concludes.ttl diff --git a/SGO/ogit/verbs/conducts.ttl b/SGO/sgo/verbs/conducts.ttl similarity index 100% rename from SGO/ogit/verbs/conducts.ttl rename to SGO/sgo/verbs/conducts.ttl diff --git a/SGO/ogit/verbs/configures.ttl b/SGO/sgo/verbs/configures.ttl similarity index 100% rename from SGO/ogit/verbs/configures.ttl rename to SGO/sgo/verbs/configures.ttl diff --git a/SGO/ogit/verbs/conformsTo.ttl b/SGO/sgo/verbs/conformsTo.ttl similarity index 100% rename from SGO/ogit/verbs/conformsTo.ttl rename to SGO/sgo/verbs/conformsTo.ttl diff --git a/SGO/ogit/verbs/connects.ttl b/SGO/sgo/verbs/connects.ttl similarity index 100% rename from SGO/ogit/verbs/connects.ttl rename to SGO/sgo/verbs/connects.ttl diff --git a/SGO/ogit/verbs/consistsOf.ttl b/SGO/sgo/verbs/consistsOf.ttl similarity index 100% rename from SGO/ogit/verbs/consistsOf.ttl rename to SGO/sgo/verbs/consistsOf.ttl diff --git a/SGO/ogit/verbs/consumes.ttl b/SGO/sgo/verbs/consumes.ttl similarity index 100% rename from SGO/ogit/verbs/consumes.ttl rename to SGO/sgo/verbs/consumes.ttl diff --git a/SGO/ogit/verbs/contains.ttl b/SGO/sgo/verbs/contains.ttl similarity index 100% rename from SGO/ogit/verbs/contains.ttl rename to SGO/sgo/verbs/contains.ttl diff --git a/SGO/ogit/verbs/contractsFor.ttl b/SGO/sgo/verbs/contractsFor.ttl similarity index 100% rename from SGO/ogit/verbs/contractsFor.ttl rename to SGO/sgo/verbs/contractsFor.ttl diff --git a/SGO/ogit/verbs/contributes.ttl b/SGO/sgo/verbs/contributes.ttl similarity index 100% rename from SGO/ogit/verbs/contributes.ttl rename to SGO/sgo/verbs/contributes.ttl diff --git a/SGO/ogit/verbs/controlledBy.ttl b/SGO/sgo/verbs/controlledBy.ttl similarity index 100% rename from SGO/ogit/verbs/controlledBy.ttl rename to SGO/sgo/verbs/controlledBy.ttl diff --git a/SGO/ogit/verbs/corresponds.ttl b/SGO/sgo/verbs/corresponds.ttl similarity index 100% rename from SGO/ogit/verbs/corresponds.ttl rename to SGO/sgo/verbs/corresponds.ttl diff --git a/SGO/ogit/verbs/covers.ttl b/SGO/sgo/verbs/covers.ttl similarity index 100% rename from SGO/ogit/verbs/covers.ttl rename to SGO/sgo/verbs/covers.ttl diff --git a/SGO/ogit/verbs/creates.ttl b/SGO/sgo/verbs/creates.ttl similarity index 100% rename from SGO/ogit/verbs/creates.ttl rename to SGO/sgo/verbs/creates.ttl diff --git a/SGO/ogit/verbs/custodianOf.ttl b/SGO/sgo/verbs/custodianOf.ttl similarity index 100% rename from SGO/ogit/verbs/custodianOf.ttl rename to SGO/sgo/verbs/custodianOf.ttl diff --git a/SGO/ogit/verbs/defines.ttl b/SGO/sgo/verbs/defines.ttl similarity index 100% rename from SGO/ogit/verbs/defines.ttl rename to SGO/sgo/verbs/defines.ttl diff --git a/SGO/ogit/verbs/deliversTo.ttl b/SGO/sgo/verbs/deliversTo.ttl similarity index 100% rename from SGO/ogit/verbs/deliversTo.ttl rename to SGO/sgo/verbs/deliversTo.ttl diff --git a/SGO/ogit/verbs/dependsOn.ttl b/SGO/sgo/verbs/dependsOn.ttl similarity index 100% rename from SGO/ogit/verbs/dependsOn.ttl rename to SGO/sgo/verbs/dependsOn.ttl diff --git a/SGO/ogit/verbs/deployedTo.ttl b/SGO/sgo/verbs/deployedTo.ttl similarity index 100% rename from SGO/ogit/verbs/deployedTo.ttl rename to SGO/sgo/verbs/deployedTo.ttl diff --git a/SGO/ogit/verbs/derivesFrom.ttl b/SGO/sgo/verbs/derivesFrom.ttl similarity index 100% rename from SGO/ogit/verbs/derivesFrom.ttl rename to SGO/sgo/verbs/derivesFrom.ttl diff --git a/SGO/ogit/verbs/describes.ttl b/SGO/sgo/verbs/describes.ttl similarity index 100% rename from SGO/ogit/verbs/describes.ttl rename to SGO/sgo/verbs/describes.ttl diff --git a/SGO/ogit/verbs/desires.ttl b/SGO/sgo/verbs/desires.ttl similarity index 100% rename from SGO/ogit/verbs/desires.ttl rename to SGO/sgo/verbs/desires.ttl diff --git a/SGO/ogit/verbs/directorOf.ttl b/SGO/sgo/verbs/directorOf.ttl similarity index 100% rename from SGO/ogit/verbs/directorOf.ttl rename to SGO/sgo/verbs/directorOf.ttl diff --git a/SGO/ogit/verbs/dislikes.ttl b/SGO/sgo/verbs/dislikes.ttl similarity index 100% rename from SGO/ogit/verbs/dislikes.ttl rename to SGO/sgo/verbs/dislikes.ttl diff --git a/SGO/ogit/verbs/employs.ttl b/SGO/sgo/verbs/employs.ttl similarity index 100% rename from SGO/ogit/verbs/employs.ttl rename to SGO/sgo/verbs/employs.ttl diff --git a/SGO/ogit/verbs/endorses.ttl b/SGO/sgo/verbs/endorses.ttl similarity index 100% rename from SGO/ogit/verbs/endorses.ttl rename to SGO/sgo/verbs/endorses.ttl diff --git a/SGO/ogit/verbs/executorOf.ttl b/SGO/sgo/verbs/executorOf.ttl similarity index 100% rename from SGO/ogit/verbs/executorOf.ttl rename to SGO/sgo/verbs/executorOf.ttl diff --git a/SGO/ogit/verbs/extends.ttl b/SGO/sgo/verbs/extends.ttl similarity index 100% rename from SGO/ogit/verbs/extends.ttl rename to SGO/sgo/verbs/extends.ttl diff --git a/SGO/ogit/verbs/follows.ttl b/SGO/sgo/verbs/follows.ttl similarity index 100% rename from SGO/ogit/verbs/follows.ttl rename to SGO/sgo/verbs/follows.ttl diff --git a/SGO/ogit/verbs/forks.ttl b/SGO/sgo/verbs/forks.ttl similarity index 100% rename from SGO/ogit/verbs/forks.ttl rename to SGO/sgo/verbs/forks.ttl diff --git a/SGO/ogit/verbs/generatedFrom.ttl b/SGO/sgo/verbs/generatedFrom.ttl similarity index 100% rename from SGO/ogit/verbs/generatedFrom.ttl rename to SGO/sgo/verbs/generatedFrom.ttl diff --git a/SGO/ogit/verbs/generates.ttl b/SGO/sgo/verbs/generates.ttl similarity index 100% rename from SGO/ogit/verbs/generates.ttl rename to SGO/sgo/verbs/generates.ttl diff --git a/SGO/ogit/verbs/governs.ttl b/SGO/sgo/verbs/governs.ttl similarity index 100% rename from SGO/ogit/verbs/governs.ttl rename to SGO/sgo/verbs/governs.ttl diff --git a/SGO/ogit/verbs/has.ttl b/SGO/sgo/verbs/has.ttl similarity index 100% rename from SGO/ogit/verbs/has.ttl rename to SGO/sgo/verbs/has.ttl diff --git a/SGO/ogit/verbs/hasChild.ttl b/SGO/sgo/verbs/hasChild.ttl similarity index 100% rename from SGO/ogit/verbs/hasChild.ttl rename to SGO/sgo/verbs/hasChild.ttl diff --git a/SGO/ogit/verbs/hasCousin.ttl b/SGO/sgo/verbs/hasCousin.ttl similarity index 100% rename from SGO/ogit/verbs/hasCousin.ttl rename to SGO/sgo/verbs/hasCousin.ttl diff --git a/SGO/ogit/verbs/hasFormerSpouse.ttl b/SGO/sgo/verbs/hasFormerSpouse.ttl similarity index 100% rename from SGO/ogit/verbs/hasFormerSpouse.ttl rename to SGO/sgo/verbs/hasFormerSpouse.ttl diff --git a/SGO/ogit/verbs/hasGrandchild.ttl b/SGO/sgo/verbs/hasGrandchild.ttl similarity index 100% rename from SGO/ogit/verbs/hasGrandchild.ttl rename to SGO/sgo/verbs/hasGrandchild.ttl diff --git a/SGO/ogit/verbs/hasGrandparent.ttl b/SGO/sgo/verbs/hasGrandparent.ttl similarity index 100% rename from SGO/ogit/verbs/hasGrandparent.ttl rename to SGO/sgo/verbs/hasGrandparent.ttl diff --git a/SGO/ogit/verbs/hasGuardian.ttl b/SGO/sgo/verbs/hasGuardian.ttl similarity index 100% rename from SGO/ogit/verbs/hasGuardian.ttl rename to SGO/sgo/verbs/hasGuardian.ttl diff --git a/SGO/ogit/verbs/hasInLaw.ttl b/SGO/sgo/verbs/hasInLaw.ttl similarity index 100% rename from SGO/ogit/verbs/hasInLaw.ttl rename to SGO/sgo/verbs/hasInLaw.ttl diff --git a/SGO/ogit/verbs/hasNationality.ttl b/SGO/sgo/verbs/hasNationality.ttl similarity index 100% rename from SGO/ogit/verbs/hasNationality.ttl rename to SGO/sgo/verbs/hasNationality.ttl diff --git a/SGO/ogit/verbs/hasNieceNephew.ttl b/SGO/sgo/verbs/hasNieceNephew.ttl similarity index 100% rename from SGO/ogit/verbs/hasNieceNephew.ttl rename to SGO/sgo/verbs/hasNieceNephew.ttl diff --git a/SGO/ogit/verbs/hasParent.ttl b/SGO/sgo/verbs/hasParent.ttl similarity index 100% rename from SGO/ogit/verbs/hasParent.ttl rename to SGO/sgo/verbs/hasParent.ttl diff --git a/SGO/ogit/verbs/hasSibling.ttl b/SGO/sgo/verbs/hasSibling.ttl similarity index 100% rename from SGO/ogit/verbs/hasSibling.ttl rename to SGO/sgo/verbs/hasSibling.ttl diff --git a/SGO/ogit/verbs/hasSpouse.ttl b/SGO/sgo/verbs/hasSpouse.ttl similarity index 100% rename from SGO/ogit/verbs/hasSpouse.ttl rename to SGO/sgo/verbs/hasSpouse.ttl diff --git a/SGO/ogit/verbs/hasUncleAunt.ttl b/SGO/sgo/verbs/hasUncleAunt.ttl similarity index 100% rename from SGO/ogit/verbs/hasUncleAunt.ttl rename to SGO/sgo/verbs/hasUncleAunt.ttl diff --git a/SGO/ogit/verbs/heirOf.ttl b/SGO/sgo/verbs/heirOf.ttl similarity index 100% rename from SGO/ogit/verbs/heirOf.ttl rename to SGO/sgo/verbs/heirOf.ttl diff --git a/SGO/ogit/verbs/hiddenBy.ttl b/SGO/sgo/verbs/hiddenBy.ttl similarity index 100% rename from SGO/ogit/verbs/hiddenBy.ttl rename to SGO/sgo/verbs/hiddenBy.ttl diff --git a/SGO/ogit/verbs/holds.ttl b/SGO/sgo/verbs/holds.ttl similarity index 100% rename from SGO/ogit/verbs/holds.ttl rename to SGO/sgo/verbs/holds.ttl diff --git a/SGO/ogit/verbs/hosts.ttl b/SGO/sgo/verbs/hosts.ttl similarity index 100% rename from SGO/ogit/verbs/hosts.ttl rename to SGO/sgo/verbs/hosts.ttl diff --git a/SGO/ogit/verbs/ignores.ttl b/SGO/sgo/verbs/ignores.ttl similarity index 100% rename from SGO/ogit/verbs/ignores.ttl rename to SGO/sgo/verbs/ignores.ttl diff --git a/SGO/ogit/verbs/implements.ttl b/SGO/sgo/verbs/implements.ttl similarity index 100% rename from SGO/ogit/verbs/implements.ttl rename to SGO/sgo/verbs/implements.ttl diff --git a/SGO/ogit/verbs/includes.ttl b/SGO/sgo/verbs/includes.ttl similarity index 100% rename from SGO/ogit/verbs/includes.ttl rename to SGO/sgo/verbs/includes.ttl diff --git a/SGO/ogit/verbs/installs.ttl b/SGO/sgo/verbs/installs.ttl similarity index 100% rename from SGO/ogit/verbs/installs.ttl rename to SGO/sgo/verbs/installs.ttl diff --git a/SGO/ogit/verbs/investmentManagerOf.ttl b/SGO/sgo/verbs/investmentManagerOf.ttl similarity index 100% rename from SGO/ogit/verbs/investmentManagerOf.ttl rename to SGO/sgo/verbs/investmentManagerOf.ttl diff --git a/SGO/ogit/verbs/invites.ttl b/SGO/sgo/verbs/invites.ttl similarity index 100% rename from SGO/ogit/verbs/invites.ttl rename to SGO/sgo/verbs/invites.ttl diff --git a/SGO/ogit/verbs/isEntitledTo.ttl b/SGO/sgo/verbs/isEntitledTo.ttl similarity index 100% rename from SGO/ogit/verbs/isEntitledTo.ttl rename to SGO/sgo/verbs/isEntitledTo.ttl diff --git a/SGO/ogit/verbs/isMemberOf.ttl b/SGO/sgo/verbs/isMemberOf.ttl similarity index 100% rename from SGO/ogit/verbs/isMemberOf.ttl rename to SGO/sgo/verbs/isMemberOf.ttl diff --git a/SGO/ogit/verbs/isPartOf.ttl b/SGO/sgo/verbs/isPartOf.ttl similarity index 100% rename from SGO/ogit/verbs/isPartOf.ttl rename to SGO/sgo/verbs/isPartOf.ttl diff --git a/SGO/ogit/verbs/isPresent.ttl b/SGO/sgo/verbs/isPresent.ttl similarity index 100% rename from SGO/ogit/verbs/isPresent.ttl rename to SGO/sgo/verbs/isPresent.ttl diff --git a/SGO/ogit/verbs/isResponsibleFor.ttl b/SGO/sgo/verbs/isResponsibleFor.ttl similarity index 100% rename from SGO/ogit/verbs/isResponsibleFor.ttl rename to SGO/sgo/verbs/isResponsibleFor.ttl diff --git a/SGO/ogit/verbs/issues.ttl b/SGO/sgo/verbs/issues.ttl similarity index 100% rename from SGO/ogit/verbs/issues.ttl rename to SGO/sgo/verbs/issues.ttl diff --git a/SGO/ogit/verbs/leads.ttl b/SGO/sgo/verbs/leads.ttl similarity index 100% rename from SGO/ogit/verbs/leads.ttl rename to SGO/sgo/verbs/leads.ttl diff --git a/SGO/ogit/verbs/likes.ttl b/SGO/sgo/verbs/likes.ttl similarity index 100% rename from SGO/ogit/verbs/likes.ttl rename to SGO/sgo/verbs/likes.ttl diff --git a/SGO/ogit/verbs/liquidatorOf.ttl b/SGO/sgo/verbs/liquidatorOf.ttl similarity index 100% rename from SGO/ogit/verbs/liquidatorOf.ttl rename to SGO/sgo/verbs/liquidatorOf.ttl diff --git a/SGO/ogit/verbs/listedAt.ttl b/SGO/sgo/verbs/listedAt.ttl similarity index 100% rename from SGO/ogit/verbs/listedAt.ttl rename to SGO/sgo/verbs/listedAt.ttl diff --git a/SGO/ogit/verbs/lobbyistFor.ttl b/SGO/sgo/verbs/lobbyistFor.ttl similarity index 100% rename from SGO/ogit/verbs/lobbyistFor.ttl rename to SGO/sgo/verbs/lobbyistFor.ttl diff --git a/SGO/ogit/verbs/locatedAt.ttl b/SGO/sgo/verbs/locatedAt.ttl similarity index 100% rename from SGO/ogit/verbs/locatedAt.ttl rename to SGO/sgo/verbs/locatedAt.ttl diff --git a/SGO/ogit/verbs/locatedIn.ttl b/SGO/sgo/verbs/locatedIn.ttl similarity index 100% rename from SGO/ogit/verbs/locatedIn.ttl rename to SGO/sgo/verbs/locatedIn.ttl diff --git a/SGO/ogit/verbs/madeOf.ttl b/SGO/sgo/verbs/madeOf.ttl similarity index 100% rename from SGO/ogit/verbs/madeOf.ttl rename to SGO/sgo/verbs/madeOf.ttl diff --git a/SGO/ogit/verbs/manages.ttl b/SGO/sgo/verbs/manages.ttl similarity index 100% rename from SGO/ogit/verbs/manages.ttl rename to SGO/sgo/verbs/manages.ttl diff --git a/SGO/ogit/verbs/mergedWith.ttl b/SGO/sgo/verbs/mergedWith.ttl similarity index 100% rename from SGO/ogit/verbs/mergedWith.ttl rename to SGO/sgo/verbs/mergedWith.ttl diff --git a/SGO/ogit/verbs/moderates.ttl b/SGO/sgo/verbs/moderates.ttl similarity index 100% rename from SGO/ogit/verbs/moderates.ttl rename to SGO/sgo/verbs/moderates.ttl diff --git a/SGO/ogit/verbs/nomineeFor.ttl b/SGO/sgo/verbs/nomineeFor.ttl similarity index 100% rename from SGO/ogit/verbs/nomineeFor.ttl rename to SGO/sgo/verbs/nomineeFor.ttl diff --git a/SGO/ogit/verbs/officerOf.ttl b/SGO/sgo/verbs/officerOf.ttl similarity index 100% rename from SGO/ogit/verbs/officerOf.ttl rename to SGO/sgo/verbs/officerOf.ttl diff --git a/SGO/ogit/verbs/opens.ttl b/SGO/sgo/verbs/opens.ttl similarity index 100% rename from SGO/ogit/verbs/opens.ttl rename to SGO/sgo/verbs/opens.ttl diff --git a/SGO/ogit/verbs/organizes.ttl b/SGO/sgo/verbs/organizes.ttl similarity index 100% rename from SGO/ogit/verbs/organizes.ttl rename to SGO/sgo/verbs/organizes.ttl diff --git a/SGO/ogit/verbs/originatesIn.ttl b/SGO/sgo/verbs/originatesIn.ttl similarity index 100% rename from SGO/ogit/verbs/originatesIn.ttl rename to SGO/sgo/verbs/originatesIn.ttl diff --git a/SGO/ogit/verbs/overrides.ttl b/SGO/sgo/verbs/overrides.ttl similarity index 100% rename from SGO/ogit/verbs/overrides.ttl rename to SGO/sgo/verbs/overrides.ttl diff --git a/SGO/ogit/verbs/owns.ttl b/SGO/sgo/verbs/owns.ttl similarity index 100% rename from SGO/ogit/verbs/owns.ttl rename to SGO/sgo/verbs/owns.ttl diff --git a/SGO/ogit/verbs/partneredWith.ttl b/SGO/sgo/verbs/partneredWith.ttl similarity index 100% rename from SGO/ogit/verbs/partneredWith.ttl rename to SGO/sgo/verbs/partneredWith.ttl diff --git a/SGO/ogit/verbs/performs.ttl b/SGO/sgo/verbs/performs.ttl similarity index 100% rename from SGO/ogit/verbs/performs.ttl rename to SGO/sgo/verbs/performs.ttl diff --git a/SGO/ogit/verbs/plans.ttl b/SGO/sgo/verbs/plans.ttl similarity index 100% rename from SGO/ogit/verbs/plans.ttl rename to SGO/sgo/verbs/plans.ttl diff --git a/SGO/ogit/verbs/precedes.ttl b/SGO/sgo/verbs/precedes.ttl similarity index 100% rename from SGO/ogit/verbs/precedes.ttl rename to SGO/sgo/verbs/precedes.ttl diff --git a/SGO/ogit/verbs/prioritizes.ttl b/SGO/sgo/verbs/prioritizes.ttl similarity index 100% rename from SGO/ogit/verbs/prioritizes.ttl rename to SGO/sgo/verbs/prioritizes.ttl diff --git a/SGO/ogit/verbs/produces.ttl b/SGO/sgo/verbs/produces.ttl similarity index 100% rename from SGO/ogit/verbs/produces.ttl rename to SGO/sgo/verbs/produces.ttl diff --git a/SGO/ogit/verbs/protectorOf.ttl b/SGO/sgo/verbs/protectorOf.ttl similarity index 100% rename from SGO/ogit/verbs/protectorOf.ttl rename to SGO/sgo/verbs/protectorOf.ttl diff --git a/SGO/ogit/verbs/proves.ttl b/SGO/sgo/verbs/proves.ttl similarity index 100% rename from SGO/ogit/verbs/proves.ttl rename to SGO/sgo/verbs/proves.ttl diff --git a/SGO/ogit/verbs/provides.ttl b/SGO/sgo/verbs/provides.ttl similarity index 100% rename from SGO/ogit/verbs/provides.ttl rename to SGO/sgo/verbs/provides.ttl diff --git a/SGO/ogit/verbs/providesServicesTo.ttl b/SGO/sgo/verbs/providesServicesTo.ttl similarity index 100% rename from SGO/ogit/verbs/providesServicesTo.ttl rename to SGO/sgo/verbs/providesServicesTo.ttl diff --git a/SGO/ogit/verbs/publishes.ttl b/SGO/sgo/verbs/publishes.ttl similarity index 100% rename from SGO/ogit/verbs/publishes.ttl rename to SGO/sgo/verbs/publishes.ttl diff --git a/SGO/ogit/verbs/rates.ttl b/SGO/sgo/verbs/rates.ttl similarity index 100% rename from SGO/ogit/verbs/rates.ttl rename to SGO/sgo/verbs/rates.ttl diff --git a/SGO/ogit/verbs/readBy.ttl b/SGO/sgo/verbs/readBy.ttl similarity index 100% rename from SGO/ogit/verbs/readBy.ttl rename to SGO/sgo/verbs/readBy.ttl diff --git a/SGO/ogit/verbs/receiverFor.ttl b/SGO/sgo/verbs/receiverFor.ttl similarity index 100% rename from SGO/ogit/verbs/receiverFor.ttl rename to SGO/sgo/verbs/receiverFor.ttl diff --git a/SGO/ogit/verbs/receives.ttl b/SGO/sgo/verbs/receives.ttl similarity index 100% rename from SGO/ogit/verbs/receives.ttl rename to SGO/sgo/verbs/receives.ttl diff --git a/SGO/ogit/verbs/receivesFrom.ttl b/SGO/sgo/verbs/receivesFrom.ttl similarity index 100% rename from SGO/ogit/verbs/receivesFrom.ttl rename to SGO/sgo/verbs/receivesFrom.ttl diff --git a/SGO/ogit/verbs/recommends.ttl b/SGO/sgo/verbs/recommends.ttl similarity index 100% rename from SGO/ogit/verbs/recommends.ttl rename to SGO/sgo/verbs/recommends.ttl diff --git a/SGO/ogit/verbs/references.ttl b/SGO/sgo/verbs/references.ttl similarity index 100% rename from SGO/ogit/verbs/references.ttl rename to SGO/sgo/verbs/references.ttl diff --git a/SGO/ogit/verbs/registeredAt.ttl b/SGO/sgo/verbs/registeredAt.ttl similarity index 100% rename from SGO/ogit/verbs/registeredAt.ttl rename to SGO/sgo/verbs/registeredAt.ttl diff --git a/SGO/ogit/verbs/registers.ttl b/SGO/sgo/verbs/registers.ttl similarity index 100% rename from SGO/ogit/verbs/registers.ttl rename to SGO/sgo/verbs/registers.ttl diff --git a/SGO/ogit/verbs/rejects.ttl b/SGO/sgo/verbs/rejects.ttl similarity index 100% rename from SGO/ogit/verbs/rejects.ttl rename to SGO/sgo/verbs/rejects.ttl diff --git a/SGO/ogit/verbs/relates.ttl b/SGO/sgo/verbs/relates.ttl similarity index 100% rename from SGO/ogit/verbs/relates.ttl rename to SGO/sgo/verbs/relates.ttl diff --git a/SGO/ogit/verbs/repliedWith.ttl b/SGO/sgo/verbs/repliedWith.ttl similarity index 100% rename from SGO/ogit/verbs/repliedWith.ttl rename to SGO/sgo/verbs/repliedWith.ttl diff --git a/SGO/ogit/verbs/reportedOn.ttl b/SGO/sgo/verbs/reportedOn.ttl similarity index 100% rename from SGO/ogit/verbs/reportedOn.ttl rename to SGO/sgo/verbs/reportedOn.ttl diff --git a/SGO/ogit/verbs/reports.ttl b/SGO/sgo/verbs/reports.ttl similarity index 100% rename from SGO/ogit/verbs/reports.ttl rename to SGO/sgo/verbs/reports.ttl diff --git a/SGO/ogit/verbs/represents.ttl b/SGO/sgo/verbs/represents.ttl similarity index 100% rename from SGO/ogit/verbs/represents.ttl rename to SGO/sgo/verbs/represents.ttl diff --git a/SGO/ogit/verbs/requests.ttl b/SGO/sgo/verbs/requests.ttl similarity index 100% rename from SGO/ogit/verbs/requests.ttl rename to SGO/sgo/verbs/requests.ttl diff --git a/SGO/ogit/verbs/requires.ttl b/SGO/sgo/verbs/requires.ttl similarity index 100% rename from SGO/ogit/verbs/requires.ttl rename to SGO/sgo/verbs/requires.ttl diff --git a/SGO/ogit/verbs/residesIn.ttl b/SGO/sgo/verbs/residesIn.ttl similarity index 100% rename from SGO/ogit/verbs/residesIn.ttl rename to SGO/sgo/verbs/residesIn.ttl diff --git a/SGO/ogit/verbs/resolves.ttl b/SGO/sgo/verbs/resolves.ttl similarity index 100% rename from SGO/ogit/verbs/resolves.ttl rename to SGO/sgo/verbs/resolves.ttl diff --git a/SGO/ogit/verbs/responds.ttl b/SGO/sgo/verbs/responds.ttl similarity index 100% rename from SGO/ogit/verbs/responds.ttl rename to SGO/sgo/verbs/responds.ttl diff --git a/SGO/ogit/verbs/reviews.ttl b/SGO/sgo/verbs/reviews.ttl similarity index 100% rename from SGO/ogit/verbs/reviews.ttl rename to SGO/sgo/verbs/reviews.ttl diff --git a/SGO/ogit/verbs/runsOn.ttl b/SGO/sgo/verbs/runsOn.ttl similarity index 100% rename from SGO/ogit/verbs/runsOn.ttl rename to SGO/sgo/verbs/runsOn.ttl diff --git a/SGO/ogit/verbs/sameAs.ttl b/SGO/sgo/verbs/sameAs.ttl similarity index 100% rename from SGO/ogit/verbs/sameAs.ttl rename to SGO/sgo/verbs/sameAs.ttl diff --git a/SGO/ogit/verbs/seenBy.ttl b/SGO/sgo/verbs/seenBy.ttl similarity index 100% rename from SGO/ogit/verbs/seenBy.ttl rename to SGO/sgo/verbs/seenBy.ttl diff --git a/SGO/ogit/verbs/sells.ttl b/SGO/sgo/verbs/sells.ttl similarity index 100% rename from SGO/ogit/verbs/sells.ttl rename to SGO/sgo/verbs/sells.ttl diff --git a/SGO/ogit/verbs/sellsTo.ttl b/SGO/sgo/verbs/sellsTo.ttl similarity index 100% rename from SGO/ogit/verbs/sellsTo.ttl rename to SGO/sgo/verbs/sellsTo.ttl diff --git a/SGO/ogit/verbs/sends.ttl b/SGO/sgo/verbs/sends.ttl similarity index 100% rename from SGO/ogit/verbs/sends.ttl rename to SGO/sgo/verbs/sends.ttl diff --git a/SGO/ogit/verbs/settlorOf.ttl b/SGO/sgo/verbs/settlorOf.ttl similarity index 100% rename from SGO/ogit/verbs/settlorOf.ttl rename to SGO/sgo/verbs/settlorOf.ttl diff --git a/SGO/ogit/verbs/signatoryFor.ttl b/SGO/sgo/verbs/signatoryFor.ttl similarity index 100% rename from SGO/ogit/verbs/signatoryFor.ttl rename to SGO/sgo/verbs/signatoryFor.ttl diff --git a/SGO/ogit/verbs/soldTo.ttl b/SGO/sgo/verbs/soldTo.ttl similarity index 100% rename from SGO/ogit/verbs/soldTo.ttl rename to SGO/sgo/verbs/soldTo.ttl diff --git a/SGO/ogit/verbs/solves.ttl b/SGO/sgo/verbs/solves.ttl similarity index 100% rename from SGO/ogit/verbs/solves.ttl rename to SGO/sgo/verbs/solves.ttl diff --git a/SGO/ogit/verbs/specifies.ttl b/SGO/sgo/verbs/specifies.ttl similarity index 100% rename from SGO/ogit/verbs/specifies.ttl rename to SGO/sgo/verbs/specifies.ttl diff --git a/SGO/ogit/verbs/subscribes.ttl b/SGO/sgo/verbs/subscribes.ttl similarity index 100% rename from SGO/ogit/verbs/subscribes.ttl rename to SGO/sgo/verbs/subscribes.ttl diff --git a/SGO/ogit/verbs/subsidiaryOf.ttl b/SGO/sgo/verbs/subsidiaryOf.ttl similarity index 100% rename from SGO/ogit/verbs/subsidiaryOf.ttl rename to SGO/sgo/verbs/subsidiaryOf.ttl diff --git a/SGO/ogit/verbs/supervises.ttl b/SGO/sgo/verbs/supervises.ttl similarity index 100% rename from SGO/ogit/verbs/supervises.ttl rename to SGO/sgo/verbs/supervises.ttl diff --git a/SGO/ogit/verbs/supports.ttl b/SGO/sgo/verbs/supports.ttl similarity index 100% rename from SGO/ogit/verbs/supports.ttl rename to SGO/sgo/verbs/supports.ttl diff --git a/SGO/ogit/verbs/tracks.ttl b/SGO/sgo/verbs/tracks.ttl similarity index 100% rename from SGO/ogit/verbs/tracks.ttl rename to SGO/sgo/verbs/tracks.ttl diff --git a/SGO/ogit/verbs/transfers.ttl b/SGO/sgo/verbs/transfers.ttl similarity index 100% rename from SGO/ogit/verbs/transfers.ttl rename to SGO/sgo/verbs/transfers.ttl diff --git a/SGO/ogit/verbs/triggers.ttl b/SGO/sgo/verbs/triggers.ttl similarity index 100% rename from SGO/ogit/verbs/triggers.ttl rename to SGO/sgo/verbs/triggers.ttl diff --git a/SGO/ogit/verbs/trusteeOf.ttl b/SGO/sgo/verbs/trusteeOf.ttl similarity index 100% rename from SGO/ogit/verbs/trusteeOf.ttl rename to SGO/sgo/verbs/trusteeOf.ttl diff --git a/SGO/ogit/verbs/updates.ttl b/SGO/sgo/verbs/updates.ttl similarity index 100% rename from SGO/ogit/verbs/updates.ttl rename to SGO/sgo/verbs/updates.ttl diff --git a/SGO/ogit/verbs/uses.ttl b/SGO/sgo/verbs/uses.ttl similarity index 100% rename from SGO/ogit/verbs/uses.ttl rename to SGO/sgo/verbs/uses.ttl diff --git a/SGO/ogit/verbs/utilizes.ttl b/SGO/sgo/verbs/utilizes.ttl similarity index 100% rename from SGO/ogit/verbs/utilizes.ttl rename to SGO/sgo/verbs/utilizes.ttl diff --git a/SGO/ogit/verbs/validFor.ttl b/SGO/sgo/verbs/validFor.ttl similarity index 100% rename from SGO/ogit/verbs/validFor.ttl rename to SGO/sgo/verbs/validFor.ttl diff --git a/SGO/ogit/verbs/versions.ttl b/SGO/sgo/verbs/versions.ttl similarity index 100% rename from SGO/ogit/verbs/versions.ttl rename to SGO/sgo/verbs/versions.ttl diff --git a/SGO/ogit/verbs/virtualizes.ttl b/SGO/sgo/verbs/virtualizes.ttl similarity index 100% rename from SGO/ogit/verbs/virtualizes.ttl rename to SGO/sgo/verbs/virtualizes.ttl diff --git a/SGO/ogit/verbs/wasBestManFor.ttl b/SGO/sgo/verbs/wasBestManFor.ttl similarity index 100% rename from SGO/ogit/verbs/wasBestManFor.ttl rename to SGO/sgo/verbs/wasBestManFor.ttl diff --git a/SGO/ogit/verbs/wasBridesmaidFor.ttl b/SGO/sgo/verbs/wasBridesmaidFor.ttl similarity index 100% rename from SGO/ogit/verbs/wasBridesmaidFor.ttl rename to SGO/sgo/verbs/wasBridesmaidFor.ttl diff --git a/SGO/ogit/verbs/wasEngagedTo.ttl b/SGO/sgo/verbs/wasEngagedTo.ttl similarity index 100% rename from SGO/ogit/verbs/wasEngagedTo.ttl rename to SGO/sgo/verbs/wasEngagedTo.ttl diff --git a/SGO/ogit/verbs/wasGroomsmanFor.ttl b/SGO/sgo/verbs/wasGroomsmanFor.ttl similarity index 100% rename from SGO/ogit/verbs/wasGroomsmanFor.ttl rename to SGO/sgo/verbs/wasGroomsmanFor.ttl diff --git a/SGO/ogit/verbs/wasMaidOfHonorFor.ttl b/SGO/sgo/verbs/wasMaidOfHonorFor.ttl similarity index 100% rename from SGO/ogit/verbs/wasMaidOfHonorFor.ttl rename to SGO/sgo/verbs/wasMaidOfHonorFor.ttl diff --git a/SGO/ogit/verbs/wasOfficiantFor.ttl b/SGO/sgo/verbs/wasOfficiantFor.ttl similarity index 100% rename from SGO/ogit/verbs/wasOfficiantFor.ttl rename to SGO/sgo/verbs/wasOfficiantFor.ttl diff --git a/SGO/ogit/verbs/wasWeddingWitnessFor.ttl b/SGO/sgo/verbs/wasWeddingWitnessFor.ttl similarity index 100% rename from SGO/ogit/verbs/wasWeddingWitnessFor.ttl rename to SGO/sgo/verbs/wasWeddingWitnessFor.ttl diff --git a/SGO/ogit/verbs/whollyOwnedSubsidiaryOf.ttl b/SGO/sgo/verbs/whollyOwnedSubsidiaryOf.ttl similarity index 100% rename from SGO/ogit/verbs/whollyOwnedSubsidiaryOf.ttl rename to SGO/sgo/verbs/whollyOwnedSubsidiaryOf.ttl diff --git a/SGO/ogit/verbs/wins.ttl b/SGO/sgo/verbs/wins.ttl similarity index 100% rename from SGO/ogit/verbs/wins.ttl rename to SGO/sgo/verbs/wins.ttl diff --git a/SGO/ogit/verbs/worksOn.ttl b/SGO/sgo/verbs/worksOn.ttl similarity index 100% rename from SGO/ogit/verbs/worksOn.ttl rename to SGO/sgo/verbs/worksOn.ttl diff --git a/validate.sh b/validate.sh index 949b90523f..e40d42de99 100755 --- a/validate.sh +++ b/validate.sh @@ -14,7 +14,7 @@ # such a run prints two `Count of errors:` summary blocks (e.g. 2943 # and 312) full of "doesn't exist!" errors against ogit:name, # ogit:Node, ogit:generates, ogit:Timeseries, ogit:Location etc. -- -# all of which are correctly defined in SGO/ogit/. +# all of which are correctly defined in SGO/sgo/. # # Note: passing the repo root as a directory argument # (`java -jar bin/ogit-validator.jar .`) is NOT a usable fix even From f173bf2d7be9df378494f6bcd02361c7c595bba8 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 28 Oct 2026 02:59:12 +0000 Subject: [PATCH 14/16] Add a Python port of the OGIT validator tools/ogit_validate.py reproduces bin/ogit-validator.jar's three stages (per-file prefix, name and directory checks; the ten validation queries; the entity registry checks) with the jar's messages, streams and exit status, so the ontology can be validated without Java. The behaviour was read from the jar's bytecode. Two findings decide the output order: rdf4j's memory store commits through a sorted TreeModel, so statements come back sorted rather than in file order, and the directory check matches against the file's canonical path. tools/test_ogit_validate.py runs 18 fixtures and compares the port with output recorded from the jar (and with the jar itself when Java is installed). On the whole repository the port and the jar print the same result in a checkout named OGIT, in a checkout under another name, and on master. import_check.py's parser now keeps language tags and the datatypes of bare numbers and booleans, which the port needs. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMPWTwovjYJEUMuGPb4 --- .../__pycache__/ogit_validate.cpython-313.pyc | Bin 0 -> 52552 bytes tools/import_check.py | 24 +- tools/ogit_validate.py | 825 ++++++++++++++++++ tools/test_ogit_validate.py | 206 +++++ tools/testdata/ogit_validate_expected.json | 164 ++++ 5 files changed, 1213 insertions(+), 6 deletions(-) create mode 100644 tools/__pycache__/ogit_validate.cpython-313.pyc create mode 100644 tools/ogit_validate.py create mode 100644 tools/test_ogit_validate.py create mode 100644 tools/testdata/ogit_validate_expected.json diff --git a/tools/__pycache__/ogit_validate.cpython-313.pyc b/tools/__pycache__/ogit_validate.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..349d84583e4345ffcbeb6cc514f88c1116d13d2b GIT binary patch literal 52552 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/(.*)/`, + case-insensitive; the first one that doesn't stops the run. The + namespace dir is the subject IRI's path between `www.purl.org/` and the + local name, with `ogit/` removed. +2. Ten SPARQL queries (`validation0.rq` ... `validation9.rq` in the jar) run + over all files together. Each failing query prints one line. +3. The entity registry: every referenced attribute, parent, allowed target + and allowed verb must exist, scopes and cardinalities must be known, and + entities, verbs and attributes need a label, a description, a creator and + a `dcterms:valid` start date. + +Order. rdf4j's in-memory store commits each add through a sorted TreeModel, +so statements come back sorted (LexicalValueComparator: blank nodes, IRIs, +literals; IRIs by string), not in file order. This port sorts the same way. +That decides the first subject of a file in stage 1, and the order of the +stage 3 messages and the value read when a property has several. + +The directory check uses the canonical path. Root-namespace files such as +SGO/sgo/entities/Node.ttl pass only because the checkout itself is named +OGIT (or ogit): the pattern /ogit/(.*)/node.ttl then matches. In a checkout +under another name the same files fail. + +Known differences from the jar: + - Stage 2 names one subject per failing query: the first group the query + engine produces. That order depends on rdf4j's grouping and on the order + of the arguments, and no model of it reproduced the jar. This port + reports the first failing subject in store order; the set of failing + queries is the same. `--all` lists every subject. + - The prefix error names the jar's data-source object, which Java prints + as `co.arago.meerkat.validator.FileDataSource@`. The hash is not + reproducible; this port prints a hash of the path. + - Turtle syntax errors are reported with this parser's message and line, + not rdf4j's (except for an undeclared prefix, whose message matches). + - Only the Turtle this repository uses is parsed (see import_check.py), + plus `^^` datatypes and string escapes. + +Exit status: 0 valid, 1 invalid. +""" + +import argparse +import os +import re +import sys +import time + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +import import_check as ic # noqa: E402 + +OGIT = "http://www.purl.org/ogit/" +RDF = "http://www.w3.org/1999/02/22-rdf-syntax-ns#" +RDFS = "http://www.w3.org/2000/01/rdf-schema#" +DCT = "http://purl.org/dc/terms/" +XSD = "http://www.w3.org/2001/XMLSchema#" + +RDF_FIRST, RDF_REST, RDF_NIL = RDF + "first", RDF + "rest", RDF + "nil" +SUBCLASS, SUBPROP, LABEL = RDFS + "subClassOf", RDFS + "subPropertyOf", RDFS + "label" + +# Prefixes rdf4j 2.1.3's Turtle parser resolves without a declaration +# (BasicParserSettings / Namespaces.DEFAULT_RDF4J). +DEFAULT_PREFIXES = { + "cat": "http://www.w3.org/ns/dcat#", "qb": "http://purl.org/linked-data/cube#", + "grddl": "http://www.w3.org/2003/g/data-view#", "ma": "http://www.w3.org/ns/ma-ont#", + "owl": "http://www.w3.org/2002/07/owl#", "rdf": RDF, "rdfa": "http://www.w3.org/ns/rdfa#", + "rdfs": RDFS, "rif": "http://www.w3.org/2007/rif#", "rr": "http://www.w3.org/ns/r2rml#", + "skos": "http://www.w3.org/2004/02/skos/core#", + "skosxl": "http://www.w3.org/2008/05/skos-xl#", "wdr": "http://www.w3.org/2007/05/powder#", + "void": "http://rdfs.org/ns/void#", "wdrs": "http://www.w3.org/2007/05/powder-s#", + "xhv": "http://www.w3.org/1999/xhtml/vocab#", "xml": "http://www.w3.org/XML/1998/namespace", + "xsd": XSD, "prov": "http://www.w3.org/ns/prov#", "sd": "http://www.w3.org/ns/sparql-service-description#", + "org": "http://www.w3.org/ns/org#", "gldp": "http://www.w3.org/ns/people#", + "cnt": "http://www.w3.org/2008/content#", "dcat": "http://www.w3.org/ns/dcat#", + "earl": "http://www.w3.org/ns/earl#", "ht": "http://www.w3.org/2006/http#", + "ptr": "http://www.w3.org/2009/pointers#", "cc": "http://creativecommons.org/ns#", + "ctag": "http://commontag.org/ns#", "dc": DCT, "dc11": "http://purl.org/dc/elements/1.1/", + "dcterms": DCT, "foaf": "http://xmlns.com/foaf/0.1/", "gr": "http://purl.org/goodrelations/v1#", + "ical": "http://www.w3.org/2002/12/cal/icaltzd#", "og": "http://ogp.me/ns#", + "rev": "http://purl.org/stuff/rev#", "sioc": "http://rdfs.org/sioc/ns#", + "v": "http://rdf.data-vocabulary.org/#", "vcard": "http://www.w3.org/2006/vcard/ns#", + "schema": "http://schema.org/", +} + +RESET, RED, YELLOW = "\x1b[0m", "\x1b[31m", "\x1b[33m" + + +# -------------------------------------------------------------------------- +# Output +# -------------------------------------------------------------------------- + +class Out: + def __init__(self, color): + self.color = color + + def failed(self, message): + """The jar's ColoredErrorFormatter line, printed to stdout.""" + if self.color: + print(f"{RED}Validation failed{RESET}: {YELLOW}{message}{RESET}") + else: + print(f"Validation failed: {message}") + + +class JavaCrash(Exception): + """An exception the jar does not catch; Java prints it and exits 1.""" + + +class TurtleError(Exception): + """A Turtle syntax error, as rdf4j's RDFParseException reports it.""" + + def __init__(self, message, line): + super().__init__(f"{message} [line {line}]") + self.message, self.line = message, line + + def log(self): + """rdf4j's ParseErrorLogger line, which logback writes to stderr.""" + stamp = time.strftime("%H:%M:%S") + ".%03d" % (int(time.time() * 1000) % 1000) + print(f"{stamp} [main] ERROR o.e.r.rio.helpers.ParseErrorLogger - [Rio fatal] " + f"{self.message} ({self.line}, -1)", file=sys.stderr) + + def crash(self): + self.log() + return JavaCrash(f"org.eclipse.rdf4j.rio.RDFParseException: {self}") + + +# -------------------------------------------------------------------------- +# RDF model +# -------------------------------------------------------------------------- + +def unescape(s): + def repl(m): + e = m.group(1) + if e[0] in "uU": + return chr(int(e[1:], 16)) + return {"t": "\t", "n": "\n", "r": "\r", "b": "\b", "f": "\f"}.get(e, e) + return re.sub(r"\\(u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8}|.)", repl, s, flags=re.S) + + +NUMERIC = {XSD + t for t in ( + "decimal integer long int short byte double float nonPositiveInteger negativeInteger " + "nonNegativeInteger positiveInteger unsignedLong unsignedInt unsignedShort unsignedByte").split()} +CALENDAR = {XSD + t for t in + "dateTime dateTimeStamp time date gYearMonth gYear gMonthDay gDay gMonth".split()} + + +def jstr(s): + """Sort key for java.lang.String.compareTo (UTF-16 code units).""" + return s.encode("utf-16-be", "surrogatepass") + + +def node_key(n): + """rdf4j LexicalValueComparator: blank nodes, then IRIs, then literals.""" + if n[0] == "bnode": + return (0, jstr(n[1])) + if n[0] == "iri": + return (1, jstr(n[1])) + dt = n[3] if n[3] is not None else RDF + "langString" + group = 0 if dt in NUMERIC else 1 if dt in CALENDAR else 2 + lang = (0, b"") if n[2] is None else (1, jstr(n[2])) + return (2, group, jstr(dt), lang, jstr(n[1])) + + +class Model: + """A repository's statements as rdf4j's MemoryStore returns them. + + The store commits each add through a TreeModel, so statements come back + sorted by subject, predicate and object (LexicalValueComparator), not in + file order; duplicates collapse. + + A node is ("iri", value), ("bnode", id) or ("lit", label, lang, datatype). + """ + + def __init__(self): + self.triples = [] + self._seen = set() + self._bnodes = 0 + + def add(self, s, p, o): + t = (s, p, o) + if t not in self._seen: + self._seen.add(t) + self.triples.append(t) + + def bnode(self): + self._bnodes += 1 + return ("bnode", f"node{self._bnodes}") + + def node(self, term): + """Turn a parsed term into a node, adding the triples it implies. + + rdf4j reports the triples inside `[ ... ]` and `( ... )` before the + triple that uses the blank node, so they are added first. + """ + if term.kind == "iri": + return ("iri", term.value) + if term.kind == "lit": + dt = term.datatype + if term.lang is not None: + return ("lit", unescape(term.value), term.lang.lower(), None) + return ("lit", unescape(term.value), None, dt or XSD + "string") + if term.kind == "bnode": + b = self.bnode() + for p, o in term.value: + on = self.node(o) + self.add(b, ("iri", p.value), on) + return b + if term.kind == "list": + if not term.value: + return ("iri", RDF_NIL) + head = cell = self.bnode() + for k, item in enumerate(term.value): + self.add(cell, ("iri", RDF_FIRST), self.node(item)) + nxt = self.bnode() if k + 1 < len(term.value) else ("iri", RDF_NIL) + self.add(cell, ("iri", RDF_REST), nxt) + cell = nxt + return head + raise ValueError(term.kind) + + def load(self, fp): + for subject, pairs in fp.statements: + s = self.node(subject) + for p, o in pairs: + self.add(s, ("iri", p.value), self.node(o)) + + def index(self): + self.triples.sort(key=lambda t: (node_key(t[0]), node_key(t[1]), node_key(t[2]))) + self.by_sp, self.by_s, self.by_p = {}, {}, {} + for s, p, o in self.triples: + self.by_sp.setdefault((s, p), []).append(o) + self.by_s.setdefault(s, []).append((p, o)) + self.by_p.setdefault(p, []).append((s, o)) + return self + + def objs(self, s, p): + return self.by_sp.get((s, ("iri", p)), []) + + def subjects(self, p, o): + return [s for s, oo in self.by_p.get(("iri", p), []) if oo == ("iri", o)] + + +def string_value(n): + return n[1] + + +def to_string(n): + """rdf4j Value.toString().""" + if n[0] == "iri": + return n[1] + if n[0] == "bnode": + return "_:" + n[1] + if n[2] is not None: + return f'"{n[1]}"@{n[2]}' + return f'"{n[1]}"^^<{n[3]}>' + + +def parse_text(path, text): + """Parse Turtle as rdf4j does; return a FileParse. + + Raises TurtleError; the message is rdf4j's for an undeclared prefix and + this parser's otherwise. + """ + try: + fp = parse_with_datatypes(path, text) + except ic.ParseError as e: + m = re.match(r"line (\d+): (.*)", str(e), re.S) + if m: + raise TurtleError(m.group(2), int(m.group(1))) from e + raise TurtleError(str(e), text.count("\n") + 1) from e + if fp.undeclared: + line, word = fp.undeclared[0] + prefix = word.split(":", 1)[0] + raise TurtleError(f"Namespace prefix '{prefix}' used but not defined", line) + return fp + + +DT_RE = re.compile(r"\^\^(<[^>]*>|[^\s()\[\];,\"'<#]+?)(?=[\s()\[\];,.]|$)") +DT_MARK = "zzdatatype-" + + +def parse_with_datatypes(path, text): + """import_check's parser does not read `^^datatype`. Each datatype is + replaced by a language-tag marker before parsing and restored after.""" + found = [] + + def cut(m): + found.append(m.group(1)) + return f"@{DT_MARK}{len(found) - 1}" + + marked = DT_RE.sub(cut, text) if "^^" in text else text + fp = ic.parse(path, marked, default_prefixes=DEFAULT_PREFIXES) + if found: + restore_datatypes(fp, found) + return fp + + +def restore_datatypes(fp, found): + def walk(t): + if t.kind == "lit" and t.lang and t.lang.startswith(DT_MARK): + dt = found[int(t.lang[len(DT_MARK):])] + if dt.startswith("<"): + t.datatype = dt[1:-1] + else: + pre, local = dt.split(":", 1) + t.datatype = fp.prefixes.get(pre, DEFAULT_PREFIXES.get(pre, "")) + local + t.lang = None + elif t.kind == "list": + for x in t.value: + walk(x) + elif t.kind == "bnode": + for _, o in t.value: + walk(o) + + for subject, pairs in fp.statements: + walk(subject) + for _, o in pairs: + walk(o) + + +def read(path): + with open(path, encoding="utf-8", errors="replace", newline="") as f: + return f.read() + + +# -------------------------------------------------------------------------- +# Inputs +# -------------------------------------------------------------------------- + +def unfold(path): + """Validator.unfoldDirectories: a directory contributes the entries whose + name ends in `.ttl`, in listing order; subdirectories are not entered.""" + if os.path.isdir(path): + out = [] + for name in os.listdir(path): + if name.endswith(".ttl"): + out.extend(unfold(os.path.join(path, name))) + return out + return [path] + + +def java_path_parts(s): + """Components of java.nio.file.Paths.get(s) on Unix.""" + return [c for c in s.split("/") if c] + + +def java_path_str(s): + parts = java_path_parts(s) + return ("/" if s.startswith("/") else "") + "/".join(parts) + + +# -------------------------------------------------------------------------- +# Stage 1: per file +# -------------------------------------------------------------------------- + +PREFIX_RE = re.compile(r"^\s*@prefix\s+([^\s]+):\s+<([^>]+)>\s+\.", re.ASCII) +LINE_SPLIT = re.compile("\r\n|[\n\r

\u0085]") + + +def stage1(out, path, text): + """Return False to stop the run.""" + canonical = os.path.realpath(path) + base = os.path.basename(canonical) + for line in LINE_SPLIT.split(text): + if "@prefix" not in line: + continue + m = PREFIX_RE.search(line) + if not m or not m.group(1).startswith("ogit"): + continue + expected = "http://www.purl.org/" + m.group(1).replace(".", "/") + "/" + if m.group(2) != expected: + source = "co.arago.meerkat.validator.FileDataSource@%x" % (hash(canonical) & 0xFFFFFFF) + msg = (f"Error in validation query {source}: {base} Declared prefix {m.group(1)} " + f"does not match expected ogit convention {expected}. declared as {m.group(2)}") + out.failed(f'Syntax error: "{msg}" at Source: ') + return False + if "ogit.ttl" in canonical: + return True + try: + fp = parse_text(path, text) + except TurtleError as e: + raise e.crash() from e + model = Model() + model.load(fp) + model.index() + subject = next((s for s, _, _ in model.triples if s[0] == "iri"), None) + subject_str = subject[1] if subject else "Optional.empty" + parts = java_path_parts(subject_str) + name = parts[-1] if parts else "" + if name + ".ttl" != base: + print("file name is not same as namespace name") + out.failed(f"File Name mismatch: {base} does not match with name: {name}") + n = len(parts) + if not (2 < n - 1): + raise JavaCrash("java.lang.IllegalArgumentException") + directory = "/".join(parts[2:n - 1]).replace("ogit/", "") + pattern = "/" + directory.lower() + "/(.*)/" + name.lower() + if not re.search(pattern, canonical.lower()): + out.failed(f"Directory mismatch: {base} should be under directory {directory}, " + f"according to {java_path_str(subject_str)}") + return False + return True + + +# -------------------------------------------------------------------------- +# Stage 2: the ten queries +# -------------------------------------------------------------------------- + +def stage2(out, model, show_all): + E, A, V = OGIT + "Entity", OGIT + "Attribute", OGIT + "Verb" + ents = model.subjects(SUBCLASS, E) + atts = model.subjects(SUBPROP, A) + verbs = model.subjects(SUBPROP, V) + members = list(dict.fromkeys(ents + atts + verbs)) + + def has(x, p): + return bool(model.objs(x, p)) + + def missing(x, props): + return " ".join(p for p in props if not has(x, p)) + + def tnames(x): + # BIND(SUBSTR(STR(?t), STRLEN(STR(ogit:)) + 1) AS ?tname) + return [string_value(t)[len(OGIT):] for t in model.objs(x, SUBCLASS) + model.objs(x, SUBPROP)] + + def history_items(x): + """?x ogit:history/rdf:rest*/rdf:first ?h""" + items, seen = [], set() + frontier = list(model.objs(x, OGIT + "history")) + while frontier: + cell = frontier.pop(0) + if cell in seen or cell[0] == "lit": + continue + seen.add(cell) + for f in model.objs(cell, RDF_FIRST): + if f not in items: + items.append(f) + frontier.extend(model.objs(cell, RDF_REST)) + return items + + failures = [] + + def report(desc, n): + failures.append(f"{desc} (/validation{n}.rq)") + + def required(n, kind, xs, props): + bad = [(x, missing(x, props)) for x in xs if missing(x, props)] + for x, miss in (bad if show_all else bad[:1]): + report(f"{kind} {string_value(x)} is missing property(ies): {miss}", n) + + # validation0 / 4 / 5 + v0 = [LABEL, DCT + "description", DCT + "valid", DCT + "creator", OGIT + "scope", + OGIT + "parent", OGIT + "mandatory-attributes", OGIT + "optional-attributes", OGIT + "allowed"] + base = [LABEL, DCT + "description", DCT + "valid", DCT + "creator"] + results = {} + required(0, "Entity", ents, v0) + results[0] = list(failures) + failures.clear() + + # validation1: history items missing properties + hprops = [DCT + "identifier", DCT + "description", DCT + "creator", DCT + "date"] + for x in members: + for h in history_items(x): + miss = " ".join(p for p in hprops if not (h[0] != "lit" and model.objs(h, p))) + if miss: + for t in tnames(x)[:1] if not show_all else tnames(x): + report(f"{t} {string_value(x)} is missing property(ies) in one of its " + f"ogit:history items: {miss}", 1) + break + if failures and not show_all: + break + results[1] = list(failures) + failures.clear() + + # validation2: duplicate history identifiers + for x in members: + counts = {} + for h in history_items(x): + if h[0] == "lit": + continue + for i in model.objs(h, DCT + "identifier"): + counts[i] = counts.get(i, 0) + 1 + for i, c in counts.items(): + if c > 1: + for t in tnames(x)[:1] if not show_all else tnames(x): + suffix = f" ({string_value(i)})" if i[0] == "lit" else "" + report(f"{t} {string_value(x)} has duplicate dcterms:identifier in its " + f"ogit:history items{suffix}", 2) + if failures and not show_all: + break + results[2] = list(failures) + failures.clear() + + # validation3: date format + date_re = re.compile(r"\d{4}-\d{2}-\d{2}") + for x in members: + ds = model.objs(x, DCT + "created") + model.objs(x, DCT + "modified") + for h in history_items(x): + if h[0] != "lit": + ds += model.objs(h, DCT + "date") + if any(not date_re.fullmatch(string_value(d)) for d in ds): + for t in tnames(x)[:1] if not show_all else tnames(x): + report(f"{t} {string_value(x)} has invalid value for dcterms:created/modified/date: " + f"Should be in ISO 8601 format (YYYY-MM-DD)", 3) + if failures and not show_all: + break + results[3] = list(failures) + failures.clear() + + required(4, "Attribute", atts, base) + results[4] = list(failures) + failures.clear() + required(5, "Verb", verbs, base) + results[5] = list(failures) + failures.clear() + + # validation6..9: the subquery picks one subject among ALL subjects + # (LIMIT 1), then the outer query keeps it only if it is an attribute. + att_set = set(atts) + vt, vp = OGIT + "validation-type", OGIT + "validation-parameter" + all_subjects = list(dict.fromkeys(s for s, _, _ in model.triples)) + + def empty_lit(n): + return n[0] == "lit" and n[1] == "" and n[2] is None and n[3] == XSD + "string" + + def limited(n, cands, outer, desc): + picks = cands if show_all else cands[:1] + for x in picks: + if outer(x): + report(desc(x), n) + + limited(6, [x for x in all_subjects if has(x, vt) and not has(x, vp)], + lambda x: x in att_set, + lambda x: f"Attribute {string_value(x)} is missing property(ies): {vp}") + results[6] = list(failures) + failures.clear() + limited(7, [x for x in all_subjects if any(empty_lit(o) for o in model.objs(x, vp))], + lambda x: x in att_set and has(x, vt), + lambda x: f"Attribute {string_value(x)} has empty value for ogit:validation-parameter(ies): ") + results[7] = list(failures) + failures.clear() + limited(8, [x for x in all_subjects if any(empty_lit(o) for o in model.objs(x, vt))], + lambda x: x in att_set and has(x, vp), + lambda x: f"Attribute {string_value(x)} has empty value for ogit:validation-type(ies): ") + results[8] = list(failures) + failures.clear() + limited(9, [x for x in all_subjects if has(x, vp) and not has(x, vt)], + lambda x: x in att_set, + lambda x: f"Attribute {string_value(x)} is missing property(ies): {vt}") + results[9] = list(failures) + failures.clear() + + lines = [line for n in range(10) for line in results[n]] + for line in lines: + out.failed(line) + return not lines + + +# -------------------------------------------------------------------------- +# Stage 3: the entity registry (TTLLoader + OgitValidator) +# -------------------------------------------------------------------------- + +class RegistryError(Exception): + pass + + +def stage3(model): + """Return (errors, warnings), or raise RegistryError with the loader's message.""" + def first(s, p): + o = model.objs(s, p) + return string_value(o[0]) if o else None + + def first_resource(s, p): + for o in model.objs(s, p): + if o[0] != "lit": + return o + return None + + def as_values(head): + if head is None: + raise RegistryError("list head may not be null") + vals, cell, seen = [], head, set() + while cell != ("iri", RDF_NIL): + if cell in seen: + raise RegistryError("list is cyclic") + seen.add(cell) + f = model.objs(cell, RDF_FIRST) + r = model.objs(cell, RDF_REST) + if not f or not r: + raise RegistryError(f"incomplete list at {to_string(cell)}") + vals.append(f[0]) + cell = r[0] + if cell[0] == "lit": + raise RegistryError("list rest is not a resource") + return vals + + def attributes(s, p): + vals = as_values(first_resource(s, p)) + return [to_string(v) for v in vals] or None + + def parse_date(value, which): + if value is None: + raise RegistryError("null") + found = "" + for m in re.finditer(which + r"=(.*?);", value): + found = m.group(1) + if found == "": + return None + return True if re.match(r"\s*[+-]?\d+-[+-]?\d+-[+-]?\d+", found) else None + + def common(s): + valid = first(s, DCT + "valid") + return { + "id": string_value(s), + "name": first(s, LABEL), + "description": first(s, DCT + "description"), + "valid-from": parse_date(valid, "start"), + "valid-until": parse_date(valid, "end"), + "creator": first(s, DCT + "creator"), + } + + def allowed(s): + head = first_resource(s, OGIT + "allowed") + if head is None: + return None + out = [] + for v in as_values(head): + if v[0] == "lit": + raise RegistryError("class cast") + pairs = model.by_s.get(v, []) + if not pairs: + raise RegistryError(None) + out.append({"with": to_string(pairs[0][0]), "to": string_value(pairs[0][1])}) + return out + + entities, attrs, verbs = {}, {}, {} + for s in model.subjects(SUBCLASS, OGIT + "Entity"): + item = common(s) + item["scope"] = first(s, OGIT + "scope") + item["parent"] = first(s, OGIT + "parent") + optional = attributes(s, OGIT + "optional-attributes") + mandatory = attributes(s, OGIT + "mandatory-attributes") + attributes(s, OGIT + "indexed-attributes") + item["mandatory"], item["optional"] = mandatory, optional + item["allowed"] = allowed(s) + entities[to_string(s)] = item + for s in model.subjects(SUBPROP, OGIT + "Attribute"): + attrs[to_string(s)] = common(s) + for s in model.subjects(SUBPROP, OGIT + "Verb"): + item = common(s) + item["cardinality"] = first(s, OGIT + "cardinality") + verbs[to_string(s)] = item + + errors = [] + + def blank(v): + return v is None or v.strip(" \t\n\r\x0b\x0c" + "".join(map(chr, range(0, 33)))) == "" + + def base(kind, items): + for item in items.values(): + i = item["id"] + if blank(item["description"]): + errors.append(f"{kind} id: {i} , description missing!") + if blank(item["name"]): + errors.append(f"{kind} id: {i} , label missing!") + if item["valid-from"] is None: + errors.append(f"{kind} id: {i} , valid from missing!") + if blank(item["creator"]): + errors.append(f"{kind} id: {i} , creator missing!") + + def j(v): + return "null" if v is None else v + + base("entities", entities) + for item in entities.values(): + i = item["id"] + scope = item["scope"] + if scope is not None and scope.lower() not in ("sgo", "nto"): + errors.append(f"type id: {i} , unknown scope {scope}") + parent = item["parent"] + if parent is not None: + if parent not in entities: + errors.append(f"type id: {i} , parent id : {parent} doesn't exist!") + elif i.lower() != (OGIT + "Node").lower(): + errors.append(f"type id: {i} , parent id missing!") + for key in ("mandatory", "optional"): + for name in item[key] or []: + if name not in attrs: + errors.append(f"type id: {i} , attribute id : {name} doesn't exist!") + for edge in item["allowed"] or []: + if edge["to"] not in entities: + errors.append(f"edge id: {i} , head connection id : {j(edge['to'])} doesn't exist!") + if edge["with"] not in verbs: + errors.append(f"edge id: {i} , connection id e: {j(edge['with'])} doesn't exist!") + base("verbs", verbs) + for item in verbs.values(): + card = item["cardinality"] + if card is not None and card.lower() not in ("one2one", "one2many", "many2one", "many2many"): + errors.append(f"edge id: {item['id']} , unknown cardinality {card}") + base("attributes", attrs) + return errors, [] + + +# -------------------------------------------------------------------------- +# Main +# -------------------------------------------------------------------------- + +def default_files(): + out = [] + for root, dirs, files in os.walk("."): + dirs.sort() + for f in sorted(files): + if f.endswith(".ttl") and not f.startswith("graphit-ontology."): + out.append(os.path.join(root, f)) + return out + + +def validate(paths, color=True, show_all=False): + out = Out(color) + files = [] + for p in paths: + files.extend(unfold(p)) + if not files: + out.failed("No input files specified") + return 1 + texts = {} + try: + for f in files: + if not os.path.exists(f): + out.failed(f"IO Error: {f}") + return 1 + texts[f] = read(f) + if len(files) > 1: + for f in files: + if not stage1(out, f, texts[f]): + return 1 + model = Model() + failed = False + for f in files: + try: + model.load(parse_text(f, texts[f])) + except TurtleError as e: + e.log() + out.failed(f'Syntax error: "{e}" at Source: {os.path.realpath(f)} ' + f"Line: {e.line} Column: -1 ") + failed = True + if failed: + return 1 + model.index() + if not stage2(out, model, show_all): + return 1 + # Stage 3 reads all files as one concatenated stream. + registry = Model() + try: + registry.load(parse_concatenated(files, texts)) + registry.index() + errors, warnings = stage3(registry) + except (RegistryError, TurtleError) as e: + if isinstance(e, TurtleError): + e.log() + msg = str(e) + print(f"Error while loading entity registry: {msg}", file=sys.stderr) + # The caller then reads the registry's result map (MV@334). + raise JavaCrash('java.lang.NullPointerException: Cannot invoke ' + '"java.util.Map.get(Object)" because "ontMap" is null') from e + except JavaCrash as e: + print(f'Exception in thread "main" {e}', file=sys.stderr) + return 1 + if errors: + print(f"Count of errors: {len(errors)}", file=sys.stderr) + print(f"Count of warnings: {len(warnings)}", file=sys.stderr) + for e in errors: + print(f"ERROR: {e}", file=sys.stderr) + for w in warnings: + print(f"WARNING: {w}", file=sys.stderr) + return 1 + if warnings: + print(f"Count of warnings: {len(warnings)}", file=sys.stderr) + for w in warnings: + print(f"WARNING: {w}", file=sys.stderr) + print("Validation successful.") + return 0 + + +def parse_concatenated(files, texts): + # SequenceInputStream adds no separator between files. + return parse_text("", "".join(texts[f] for f in files)) + + +def main(argv=None): + ap = argparse.ArgumentParser(description=__doc__.split("\n\n")[0]) + ap.add_argument("files", nargs="*", help="TTL files or directories (default: as validate.sh)") + ap.add_argument("--no-color", action="store_true", help="omit the ANSI colours the jar prints") + ap.add_argument("--all", action="store_true", + help="stage 2: list every failing subject, not one per query") + args = ap.parse_args(argv) + files = args.files or default_files() + sys.stdout.reconfigure(line_buffering=True) + return validate(files, color=not args.no_color, show_all=args.all) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/test_ogit_validate.py b/tools/test_ogit_validate.py new file mode 100644 index 0000000000..fd5f6cab70 --- /dev/null +++ b/tools/test_ogit_validate.py @@ -0,0 +1,206 @@ +#!/usr/bin/env python3 +"""Tests for ogit_validate.py. + +Each case is a small set of TTL files. Its expected exit status, stdout and +stderr were recorded from bin/ogit-validator.jar and are kept in +testdata/ogit_validate_expected.json; the port must print the same. Paths, +the time of day and the jar's object hash are normalised. + + python3 -I tools/test_ogit_validate.py + python3 -I tools/test_ogit_validate.py --record # rewrite the expectations from the jar (needs java) + +When java is installed, the cases also run against the jar directly. +""" + +import json +import os +import re +import shutil +import subprocess +import sys +import tempfile +import unittest + +HERE = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, HERE) +import ogit_validate as ov # noqa: E402 + +REPO = os.path.dirname(HERE) +JAR = os.path.join(REPO, "bin", "ogit-validator.jar") +EXPECTED = os.path.join(HERE, "testdata", "ogit_validate_expected.json") + +# rdf4j's wording for a generic Turtle syntax error is not reproduced (see +# the module docstring); only the quoted message differs. +SYNTAX_TEXT_DIFFERS = {"ogit_ttl_skipped"} + +P = """@prefix ogit: . +@prefix ogit.X: . +@prefix rdfs: . +@prefix dcterms: . +""" + +def ent(name, extra="", scope='"NTO"', parent="ogit:Node", mand="( )", opt="( )", allowed="( )", + valid='"start=2020-01-01;"', desc='"d"', creator='"c"', ns="ogit.X"): + body = [f"{ns}:{name} a rdfs:Class", "rdfs:subClassOf ogit:Entity", f'rdfs:label "{name}"'] + if desc is not None: body.append(f"dcterms:description {desc}") + if valid is not None: body.append(f"dcterms:valid {valid}") + if creator is not None: body.append(f"dcterms:creator {creator}") + if scope is not None: body.append(f"ogit:scope {scope}") + if parent is not None: body.append(f"ogit:parent {parent}") + if mand is not None: body.append(f"ogit:mandatory-attributes {mand}") + if opt is not None: body.append(f"ogit:optional-attributes {opt}") + body.append("ogit:indexed-attributes ( )") + if allowed is not None: body.append(f"ogit:allowed {allowed}") + if extra: body.append(extra) + return P + "\n" + " ;\n ".join(body) + " .\n" + +def prop(kind, name, extra="", ns="ogit.X", valid='"start=2020-01-01;"'): + body = [f"{ns}:{name} a rdf:Property", f"rdfs:subPropertyOf ogit:{kind}", f'rdfs:label "{name}"', + 'dcterms:description "d"', 'dcterms:creator "c"'] + if valid is not None: body.append(f"dcterms:valid {valid}") + if extra: body.append(extra) + return P + "@prefix rdf: .\n\n" + " ;\n ".join(body) + " .\n" + +NODE = ent("Node", ns="ogit", scope='"SGO"', parent="ogit:Node") +BASE = {"OGIT/SGO/sgo/entities/Node.ttl": NODE} + +CASES = { + "ok": {**BASE, "OGIT/NTO/X/entities/A.ttl": ent("A", mand="( ogit.X:c )", allowed="( [ ogit.X:v ogit.X:A ] )"), + "OGIT/NTO/X/attributes/c.ttl": prop("Attribute", "c"), + "OGIT/NTO/X/verbs/v.ttl": prop("Verb", "v", 'ogit:cardinality "one2many"')}, + "node_outside_ogit_dir": {"repo/SGO/sgo/entities/Node.ttl": NODE, "repo/NTO/X/entities/A.ttl": ent("A")}, + "prefix_mismatch": {**BASE, "OGIT/NTO/X/entities/A.ttl": ent("A").replace("", "")}, + "file_name_mismatch": {**BASE, "OGIT/NTO/X/entities/B.ttl": ent("A")}, + "directory_mismatch": {**BASE, "OGIT/NTO/Y/entities/A.ttl": ent("A")}, + "undeclared_prefix": {**BASE, "OGIT/NTO/X/entities/A.ttl": ent("A", extra="ogit.Q:foo ogit:Node")}, + "single_file": {"OGIT/NTO/Y/entities/B.ttl": ent("A", desc=None)}, + "stage2_each_query": {**BASE, + "OGIT/NTO/X/entities/A.ttl": ent("A", creator=None, extra='dcterms:created "2020-1-1"'), + "OGIT/NTO/X/attributes/c.ttl": prop("Attribute", "c", valid=None), + "OGIT/NTO/X/verbs/v.ttl": prop("Verb", "v", valid=None)}, + "stage2_validation_params": {**BASE, + "OGIT/NTO/X/attributes/a6.ttl": prop("Attribute", "a6", 'ogit:validation-type "regex"'), + "OGIT/NTO/X/attributes/a7.ttl": prop("Attribute", "a7", 'ogit:validation-type "regex" ; ogit:validation-parameter ""')}, + "stage2_validation_params_b": {**BASE, + "OGIT/NTO/X/attributes/a8.ttl": prop("Attribute", "a8", 'ogit:validation-parameter "x" ; ogit:validation-type ""')}, + "stage2_validation_params_c": {**BASE, + "OGIT/NTO/X/attributes/a9.ttl": prop("Attribute", "a9", 'ogit:validation-parameter "x"')}, + "stage2_history": {**BASE, + "OGIT/NTO/X/entities/A.ttl": ent("A", extra='ogit:history ( [ dcterms:identifier "1" ; dcterms:date "2020-01-01" ] [ dcterms:identifier "1" ; dcterms:description "d" ; dcterms:creator "c" ; dcterms:date "2020-13" ] )')}, + "stage3_errors": {**BASE, + "OGIT/NTO/X/entities/A.ttl": ent("A", scope='"XYZ"', parent="ogit.X:Missing", mand="( ogit.X:nope )", + opt="( ogit.X:c ogit.X:gone )", allowed="( [ ogit.X:v ogit.X:Nowhere ] [ ogit.X:noverb ogit.X:A ] )", + desc='" "', valid='"start=;"'), + "OGIT/NTO/X/entities/B.ttl": ent("B", parent='"http://www.purl.org/ogit/X/A"', scope='"sgo"'), + "OGIT/NTO/X/attributes/c.ttl": prop("Attribute", "c"), + "OGIT/NTO/X/verbs/v.ttl": prop("Verb", "v", 'ogit:cardinality "lots"')}, + "stage3_order": {**BASE, + "OGIT/SGO/sgo/entities/Abc.ttl": ent("Abc", ns="ogit", scope='"BAD"'), + "OGIT/NTO/Q/entities/Z.ttl": ent("Z", ns="ogit.Q", scope='"BAD"').replace("ogit.X:", "ogit.Q:").replace("", ""), + "OGIT/NTO/X/entities/M.ttl": ent("M", scope='"BAD"')}, + "stage3_list_head_null": {**BASE, "OGIT/NTO/X/entities/A.ttl": ent("A", mand='"none"')}, + "ogit_ttl_skipped": {**BASE, "OGIT/ogit.ttl": P + "\nthis is not turtle .\n", "OGIT/NTO/X/entities/A.ttl": ent("A")}, + "stage2_syntax_error_single": {"OGIT/NTO/X/entities/A.ttl": ent("A").replace("ogit:Node", "ogit.Q:Node")}, + "stage3_concat_glue": {**BASE, "OGIT/NTO/X/entities/A.ttl": ent("A").rstrip("\n") + " # no newline", "OGIT/NTO/X/entities/Z.ttl": "ogit.X:Z rdfs:label \"z\" .\n" + ent("B")}, + "no_ogit_prefix_ok_glue": {**BASE, "OGIT/NTO/X/entities/A.ttl": ent("A").rstrip("\n") + " # trailing comment, no newline"}, +} + + +def norm(text, root): + out = [] + for line in text.splitlines(): + if "JAVA_TOOL_OPTIONS" in line or line.startswith("\tat ") or line.startswith("\t... "): + continue + line = re.sub(r"^\d\d:\d\d:\d\d\.\d{3} ", "TIME ", line) + line = re.sub(r"FileDataSource@[0-9a-f]+", "FileDataSource@H", line) + out.append(line.replace(os.path.realpath(root), "")) + return out + + +def run_case(files, command): + d = tempfile.mkdtemp(prefix="ogit-validate-") + try: + for rel, text in files.items(): + p = os.path.join(d, rel) + os.makedirs(os.path.dirname(p), exist_ok=True) + with open(p, "w", encoding="utf-8") as f: + f.write(text) + root = os.path.join(d, next(iter(files)).split("/")[0]) + args = sorted("./" + os.path.relpath(os.path.join(dp, f), root) + for dp, _, fs in os.walk(root) for f in fs) + r = subprocess.run(command + args, cwd=root, capture_output=True, text=True) + return [r.returncode, norm(r.stdout, root), norm(r.stderr, root)] + finally: + shutil.rmtree(d) + + +PORT = [sys.executable, "-I", "-B", os.path.join(HERE, "ogit_validate.py")] + + +def quoted_message_removed(result): + return [result[0], [re.sub(r'Syntax error: "[^"]*"', 'Syntax error: "…"', x) for x in result[1]], + [re.sub(r"\[Rio fatal\] .*", "[Rio fatal] …", x) for x in result[2]]] + + +class Cases(unittest.TestCase): + @classmethod + def setUpClass(cls): + with open(EXPECTED, encoding="utf-8") as f: + cls.expected = json.load(f) + + def test_every_case_has_an_expectation(self): + self.assertEqual(sorted(CASES), sorted(self.expected)) + + def test_port_matches_recorded_jar_output(self): + for name, files in CASES.items(): + with self.subTest(name): + got, want = run_case(files, PORT), self.expected[name] + if name in SYNTAX_TEXT_DIFFERS: + got, want = quoted_message_removed(got), quoted_message_removed(want) + self.assertEqual(got, want) + + @unittest.skipUnless(shutil.which("java") and os.path.exists(JAR), "needs java and the jar") + def test_recorded_output_is_still_the_jars(self): + for name in ("ok", "directory_mismatch", "stage3_errors"): + with self.subTest(name): + self.assertEqual(run_case(CASES[name], ["java", "-jar", JAR]), self.expected[name]) + + +class Order(unittest.TestCase): + def test_store_order_is_lexical(self): + nodes = [("lit", "a", None, ov.XSD + "string"), ("iri", "http://b"), ("bnode", "x"), + ("iri", "http://a"), ("lit", "a", "en", None), ("lit", "1", None, ov.XSD + "int")] + got = sorted(nodes, key=ov.node_key) + self.assertEqual(got, [("bnode", "x"), ("iri", "http://a"), ("iri", "http://b"), + ("lit", "1", None, ov.XSD + "int"), ("lit", "a", "en", None), + ("lit", "a", None, ov.XSD + "string")]) + + def test_java_string_order_is_utf16(self): + # U+FFFF sorts after U+10000 in UTF-16, before it by code point. + self.assertLess(ov.jstr("\U00010000"), ov.jstr("\uffff")) + + +class AllFlag(unittest.TestCase): + def test_all_lists_every_failing_subject(self): + files = dict(BASE) + for n in ("A", "B", "C"): + files[f"OGIT/NTO/X/entities/{n}.ttl"] = ent(n, desc=None) + one = run_case(files, PORT) + every = run_case(files, PORT + ["--all"]) + self.assertEqual(len([x for x in one[1] if "validation0" in x]), 1) + self.assertEqual(len([x for x in every[1] if "validation0" in x]), 3) + + +def record(): + out = {name: run_case(files, ["java", "-jar", JAR]) for name, files in CASES.items()} + with open(EXPECTED, "w", encoding="utf-8") as f: + json.dump(out, f, indent=1) + f.write("\n") + print(f"recorded {len(out)} cases in {EXPECTED}") + + +if __name__ == "__main__": + if sys.argv[1:] == ["--record"]: + record() + else: + unittest.main() diff --git a/tools/testdata/ogit_validate_expected.json b/tools/testdata/ogit_validate_expected.json new file mode 100644 index 0000000000..06d4f3a079 --- /dev/null +++ b/tools/testdata/ogit_validate_expected.json @@ -0,0 +1,164 @@ +{ + "ok": [ + 0, + [ + "Validation successful." + ], + [] + ], + "node_outside_ogit_dir": [ + 1, + [ + "\u001b[31mValidation failed\u001b[0m: \u001b[33mDirectory mismatch: Node.ttl should be under directory ogit, according to http:/www.purl.org/ogit/Node\u001b[0m" + ], + [] + ], + "prefix_mismatch": [ + 1, + [ + "\u001b[31mValidation failed\u001b[0m: \u001b[33mSyntax error: \"Error in validation query co.arago.meerkat.validator.FileDataSource@H: A.ttl Declared prefix ogit.X does not match expected ogit convention http://www.purl.org/ogit/X/. declared as http://www.purl.org/ogit/Y/\" at Source: \u001b[0m" + ], + [] + ], + "file_name_mismatch": [ + 1, + [ + "file name is not same as namespace name", + "\u001b[31mValidation failed\u001b[0m: \u001b[33mFile Name mismatch: B.ttl does not match with name: A\u001b[0m", + "\u001b[31mValidation failed\u001b[0m: \u001b[33mDirectory mismatch: B.ttl should be under directory X, according to http:/www.purl.org/ogit/X/A\u001b[0m" + ], + [] + ], + "directory_mismatch": [ + 1, + [ + "\u001b[31mValidation failed\u001b[0m: \u001b[33mDirectory mismatch: A.ttl should be under directory X, according to http:/www.purl.org/ogit/X/A\u001b[0m" + ], + [] + ], + "undeclared_prefix": [ + 1, + [], + [ + "TIME [main] ERROR o.e.r.rio.helpers.ParseErrorLogger - [Rio fatal] Namespace prefix 'ogit.Q' used but not defined (18, -1)", + "Exception in thread \"main\" org.eclipse.rdf4j.rio.RDFParseException: Namespace prefix 'ogit.Q' used but not defined [line 18]" + ] + ], + "single_file": [ + 1, + [ + "\u001b[31mValidation failed\u001b[0m: \u001b[33mEntity http://www.purl.org/ogit/X/A is missing property(ies): http://purl.org/dc/terms/description (/validation0.rq)\u001b[0m" + ], + [] + ], + "stage2_each_query": [ + 1, + [ + "\u001b[31mValidation failed\u001b[0m: \u001b[33mEntity http://www.purl.org/ogit/X/A is missing property(ies): http://purl.org/dc/terms/creator (/validation0.rq)\u001b[0m", + "\u001b[31mValidation failed\u001b[0m: \u001b[33mEntity http://www.purl.org/ogit/X/A has invalid value for dcterms:created/modified/date: Should be in ISO 8601 format (YYYY-MM-DD) (/validation3.rq)\u001b[0m", + "\u001b[31mValidation failed\u001b[0m: \u001b[33mAttribute http://www.purl.org/ogit/X/c is missing property(ies): http://purl.org/dc/terms/valid (/validation4.rq)\u001b[0m", + "\u001b[31mValidation failed\u001b[0m: \u001b[33mVerb http://www.purl.org/ogit/X/v is missing property(ies): http://purl.org/dc/terms/valid (/validation5.rq)\u001b[0m" + ], + [] + ], + "stage2_validation_params": [ + 1, + [ + "\u001b[31mValidation failed\u001b[0m: \u001b[33mAttribute http://www.purl.org/ogit/X/a6 is missing property(ies): http://www.purl.org/ogit/validation-parameter (/validation6.rq)\u001b[0m", + "\u001b[31mValidation failed\u001b[0m: \u001b[33mAttribute http://www.purl.org/ogit/X/a7 has empty value for ogit:validation-parameter(ies): (/validation7.rq)\u001b[0m" + ], + [] + ], + "stage2_validation_params_b": [ + 1, + [ + "\u001b[31mValidation failed\u001b[0m: \u001b[33mAttribute http://www.purl.org/ogit/X/a8 has empty value for ogit:validation-type(ies): (/validation8.rq)\u001b[0m" + ], + [] + ], + "stage2_validation_params_c": [ + 1, + [ + "\u001b[31mValidation failed\u001b[0m: \u001b[33mAttribute http://www.purl.org/ogit/X/a9 is missing property(ies): http://www.purl.org/ogit/validation-type (/validation9.rq)\u001b[0m" + ], + [] + ], + "stage2_history": [ + 1, + [ + "\u001b[31mValidation failed\u001b[0m: \u001b[33mEntity http://www.purl.org/ogit/X/A is missing property(ies) in one of its ogit:history items: http://purl.org/dc/terms/description http://purl.org/dc/terms/creator (/validation1.rq)\u001b[0m", + "\u001b[31mValidation failed\u001b[0m: \u001b[33mEntity http://www.purl.org/ogit/X/A has duplicate dcterms:identifier in its ogit:history items (1) (/validation2.rq)\u001b[0m", + "\u001b[31mValidation failed\u001b[0m: \u001b[33mEntity http://www.purl.org/ogit/X/A has invalid value for dcterms:created/modified/date: Should be in ISO 8601 format (YYYY-MM-DD) (/validation3.rq)\u001b[0m" + ], + [] + ], + "stage3_errors": [ + 1, + [], + [ + "Count of errors: 9", + "Count of warnings: 0", + "ERROR: entities id: http://www.purl.org/ogit/X/A , description missing!", + "ERROR: entities id: http://www.purl.org/ogit/X/A , valid from missing!", + "ERROR: type id: http://www.purl.org/ogit/X/A , unknown scope XYZ", + "ERROR: type id: http://www.purl.org/ogit/X/A , parent id : http://www.purl.org/ogit/X/Missing doesn't exist!", + "ERROR: type id: http://www.purl.org/ogit/X/A , attribute id : http://www.purl.org/ogit/X/nope doesn't exist!", + "ERROR: type id: http://www.purl.org/ogit/X/A , attribute id : http://www.purl.org/ogit/X/gone doesn't exist!", + "ERROR: edge id: http://www.purl.org/ogit/X/A , head connection id : http://www.purl.org/ogit/X/Nowhere doesn't exist!", + "ERROR: edge id: http://www.purl.org/ogit/X/A , connection id e: http://www.purl.org/ogit/X/noverb doesn't exist!", + "ERROR: edge id: http://www.purl.org/ogit/X/v , unknown cardinality lots" + ] + ], + "stage3_order": [ + 1, + [], + [ + "Count of errors: 3", + "Count of warnings: 0", + "ERROR: type id: http://www.purl.org/ogit/Abc , unknown scope BAD", + "ERROR: type id: http://www.purl.org/ogit/Q/Z , unknown scope BAD", + "ERROR: type id: http://www.purl.org/ogit/X/M , unknown scope BAD" + ] + ], + "stage3_list_head_null": [ + 1, + [], + [ + "Error while loading entity registry: list head may not be null", + "Exception in thread \"main\" java.lang.NullPointerException: Cannot invoke \"java.util.Map.get(Object)\" because \"ontMap\" is null" + ] + ], + "ogit_ttl_skipped": [ + 1, + [ + "\u001b[31mValidation failed\u001b[0m: \u001b[33mSyntax error: \"Expected ':', found ' ' [line 6]\" at Source: /ogit.ttl Line: 6 Column: -1 \u001b[0m" + ], + [ + "TIME [main] ERROR o.e.r.rio.helpers.ParseErrorLogger - [Rio fatal] Expected ':', found ' ' (6, -1)" + ] + ], + "stage2_syntax_error_single": [ + 1, + [ + "\u001b[31mValidation failed\u001b[0m: \u001b[33mSyntax error: \"Namespace prefix 'ogit.Q' used but not defined [line 13]\" at Source: /NTO/X/entities/A.ttl Line: 13 Column: -1 \u001b[0m" + ], + [ + "TIME [main] ERROR o.e.r.rio.helpers.ParseErrorLogger - [Rio fatal] Namespace prefix 'ogit.Q' used but not defined (13, -1)" + ] + ], + "stage3_concat_glue": [ + 1, + [], + [ + "TIME [main] ERROR o.e.r.rio.helpers.ParseErrorLogger - [Rio fatal] Namespace prefix 'ogit.X' used but not defined (1, -1)", + "Exception in thread \"main\" org.eclipse.rdf4j.rio.RDFParseException: Namespace prefix 'ogit.X' used but not defined [line 1]" + ] + ], + "no_ogit_prefix_ok_glue": [ + 0, + [ + "Validation successful." + ], + [] + ] +} From b7f5d2435d560c805053c951b15efb1224a77d74 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 28 Oct 2026 03:02:09 +0000 Subject: [PATCH 15/16] Document ogit_validate.py in tools/README.md Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMPWTwovjYJEUMuGPb4 --- tools/README.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/tools/README.md b/tools/README.md index 237e3f7417..e434e20c55 100644 --- a/tools/README.md +++ b/tools/README.md @@ -1,5 +1,51 @@ # tools +## `ogit_validate.py` — the OGIT validator without Java + +`validate.sh` runs `bin/ogit-validator.jar`. `ogit_validate.py` does the same +checks in Python 3.8+ with no packages, and prints the jar's messages on the +same streams with the same exit status. With no arguments it validates the +files `validate.sh` finds from the current directory. + +```sh +python3 -I tools/ogit_validate.py +python3 -I tools/ogit_validate.py --no-color --all +python3 -I tools/test_ogit_validate.py +``` + +The jar runs three stages, each only if the one before passed: + +1. Per file (only with more than one file): `ogit*` prefixes must follow the + `http://www.purl.org//` convention; the file name + must be the local name of the file's first subject; and the canonical + path must contain `//…/.ttl`. +2. The ten queries in the jar (`validation0.rq` … `validation9.rq`): required + properties of entities, attributes and verbs, `ogit:history` items, + date formats, validation type and parameter. +3. The entity registry: referenced attributes, parents, allowed targets and + verbs must exist; scopes and cardinalities must be known; labels, + descriptions, creators and `dcterms:valid` start dates must be present. + +Two things decide the output and are easy to miss: + +- **The directory check reads the canonical path.** The root-namespace files + under `SGO/sgo/` and `SGO/core/` pass because the checkout directory is + named `OGIT`. In a checkout with another name they fail with + `Directory mismatch`, with the jar and with this port alike. +- **Statements are sorted.** rdf4j's memory store returns statements in + lexical order, not file order. That decides a file's first subject and the + order of the stage 3 messages. + +Stage 2 reports one subject per failing query. Which one the jar reports +depends on rdf4j's grouping; the port reports the first in store order, so +the subject can differ while the failing queries are the same. `--all` lists +every failing subject. + +`test_ogit_validate.py` runs 19 cases and compares the port with output +recorded from the jar; with Java installed it also runs the jar. On this +repository the port and the jar agree in a checkout named `OGIT`, in a +checkout under another name, and on `master`. + ## `import_check.py` — strict consistency check for importers `validate.sh` runs the OGIT validator, which checks what this repository From 0bf9a802f3eff62eda688ea0c8c2da857ae06eb9 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 28 Oct 2026 03:11:13 +0000 Subject: [PATCH 16/16] Describe the Accounting additions in OGIT's own terms Eleven NTO/Accounting files from 2026-05-28 described themselves as shortcuts over another application's internal field paths, and named its models. An ontology term should say what it is, not how one program stores it. - Removed, unreferenced by any entity: verbs hasPickingType and hasProductCategory, attribute productCategoryComplete. - Renamed commercialPartnerCountryCode to counterpartyCountryCode (JournalEntry's attribute lists follow). - Rewrote the descriptions of the remaining files (fiscalCountryCode, iso3166Alpha2, isEuMember, vatRateStandard, FiscalJurisdiction, JournalEntry, hasFiscalCountry) to describe the term itself. No code in lance-graph, OGAR or the consumer repositories reads the removed or renamed IRIs. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XAqKMPWTwovjYJEUMuGPb4 --- .../attributes/commercialPartnerCountryCode.ttl | 14 -------------- .../attributes/counterpartyCountryCode.ttl | 14 ++++++++++++++ NTO/Accounting/attributes/fiscalCountryCode.ttl | 4 ++-- NTO/Accounting/attributes/isEuMember.ttl | 4 ++-- NTO/Accounting/attributes/iso3166Alpha2.ttl | 4 ++-- .../attributes/productCategoryComplete.ttl | 14 -------------- NTO/Accounting/attributes/vatRateStandard.ttl | 4 ++-- NTO/Accounting/entities/FiscalJurisdiction.ttl | 4 ++-- NTO/Accounting/entities/JournalEntry.ttl | 8 ++++---- NTO/Accounting/verbs/hasFiscalCountry.ttl | 4 ++-- NTO/Accounting/verbs/hasPickingType.ttl | 14 -------------- NTO/Accounting/verbs/hasProductCategory.ttl | 14 -------------- 12 files changed, 30 insertions(+), 72 deletions(-) delete mode 100644 NTO/Accounting/attributes/commercialPartnerCountryCode.ttl create mode 100644 NTO/Accounting/attributes/counterpartyCountryCode.ttl delete mode 100644 NTO/Accounting/attributes/productCategoryComplete.ttl delete mode 100644 NTO/Accounting/verbs/hasPickingType.ttl delete mode 100644 NTO/Accounting/verbs/hasProductCategory.ttl diff --git a/NTO/Accounting/attributes/commercialPartnerCountryCode.ttl b/NTO/Accounting/attributes/commercialPartnerCountryCode.ttl deleted file mode 100644 index e87628447f..0000000000 --- a/NTO/Accounting/attributes/commercialPartnerCountryCode.ttl +++ /dev/null @@ -1,14 +0,0 @@ -@prefix ogit.Accounting: . -@prefix ogit: . -@prefix owl: . -@prefix rdfs: . -@prefix dcterms: . - -ogit.Accounting:commercialPartnerCountryCode - a owl:DatatypeProperty; - rdfs:subPropertyOf ogit:Attribute; - rdfs:label "commercialPartnerCountryCode"; - dcterms:description "ISO 3166-1 alpha-2 code of the commercial partner's country. Denormalised root-level promotion of the Odoo 3-hop chain `partner_id.commercial_partner_id.country_id.code` (or `move_id.commercial_partner_id.country_id`). Load-bearing for sanctions cross-reference (OFAC/EU/UN list jurisdiction match), VAT reverse-charge determination, and Peppol/UBL e-invoice routing. Maintained via ComputeRecompute cascade on the parent partner-chain."; - dcterms:valid "start=2026-05-28;"; - dcterms:creator "Claude (AdaWorldAPI/lance-graph 3-hop optim)"; -. diff --git a/NTO/Accounting/attributes/counterpartyCountryCode.ttl b/NTO/Accounting/attributes/counterpartyCountryCode.ttl new file mode 100644 index 0000000000..8f486e6ebf --- /dev/null +++ b/NTO/Accounting/attributes/counterpartyCountryCode.ttl @@ -0,0 +1,14 @@ +@prefix ogit.Accounting: . +@prefix ogit: . +@prefix owl: . +@prefix rdfs: . +@prefix dcterms: . + +ogit.Accounting:counterpartyCountryCode + a owl:DatatypeProperty; + rdfs:subPropertyOf ogit:Attribute; + rdfs:label "counterpartyCountryCode"; + dcterms:description "ISO 3166-1 alpha-2 code of the country of the counterparty (the customer or supplier) of a journal entry. Used to match sanctions-list jurisdictions, to decide VAT reverse charge and to route e-invoices (Peppol/UBL). Kept on the entry so these checks do not have to follow the counterparty relation."; + dcterms:valid "start=2026-05-28;"; + dcterms:creator "Claude (AdaWorldAPI)"; +. diff --git a/NTO/Accounting/attributes/fiscalCountryCode.ttl b/NTO/Accounting/attributes/fiscalCountryCode.ttl index fdf656e23e..14f495fbcc 100644 --- a/NTO/Accounting/attributes/fiscalCountryCode.ttl +++ b/NTO/Accounting/attributes/fiscalCountryCode.ttl @@ -8,7 +8,7 @@ ogit.Accounting:fiscalCountryCode a owl:DatatypeProperty; rdfs:subPropertyOf ogit:Attribute; rdfs:label "fiscalCountryCode"; - dcterms:description "ISO 3166-1 alpha-2 code of the fiscal country of this entity's company. Denormalised root-level promotion of the Odoo 3-hop chain `company_id.account_fiscal_country_id.code` (5 occurrences across TIER-1 addons per lance-graph EXT-1..6). Collapses VAT calc / sanctions cross-reference / jurisdiction routing reads from O(3) Many2one traversal to O(1) codebook lookup. Recomputed via ComputeRecompute cascade when the entity's company or that company's fiscal country changes."; + dcterms:description "ISO 3166-1 alpha-2 code of the fiscal country of the company that owns this entity. Used for VAT calculation, sanctions checks and jurisdiction routing. Kept on the entity so these checks do not have to follow the company relation; the hasFiscalCountry edge gives the same jurisdiction as a FiscalJurisdiction node."; dcterms:valid "start=2026-05-28;"; - dcterms:creator "Claude (AdaWorldAPI/lance-graph 3-hop optim)"; + dcterms:creator "Claude (AdaWorldAPI)"; . diff --git a/NTO/Accounting/attributes/isEuMember.ttl b/NTO/Accounting/attributes/isEuMember.ttl index 4cd80b4787..04565ac8f4 100644 --- a/NTO/Accounting/attributes/isEuMember.ttl +++ b/NTO/Accounting/attributes/isEuMember.ttl @@ -8,7 +8,7 @@ ogit.Accounting:isEuMember a owl:DatatypeProperty; rdfs:subPropertyOf ogit:Attribute; rdfs:label "isEuMember"; - dcterms:description "Boolean — true iff this fiscal jurisdiction is a current EU member state. Codebook attribute on FiscalJurisdiction. Hot path for VAT reverse-charge eligibility (intra-EU B2B reverse-charge rules), Peppol/UBL e-invoice routing, and MOSS / OSS classification."; + dcterms:description "True if this fiscal jurisdiction is a current EU member state. Used to decide intra-EU reverse charge, Peppol/UBL routing and OSS classification."; dcterms:valid "start=2026-05-28;"; - dcterms:creator "Claude (AdaWorldAPI/lance-graph 3-hop optim)"; + dcterms:creator "Claude (AdaWorldAPI)"; . diff --git a/NTO/Accounting/attributes/iso3166Alpha2.ttl b/NTO/Accounting/attributes/iso3166Alpha2.ttl index 4e94988b2c..63bb220a6d 100644 --- a/NTO/Accounting/attributes/iso3166Alpha2.ttl +++ b/NTO/Accounting/attributes/iso3166Alpha2.ttl @@ -8,7 +8,7 @@ ogit.Accounting:iso3166Alpha2 a owl:DatatypeProperty; rdfs:subPropertyOf ogit:Attribute; rdfs:label "iso3166Alpha2"; - dcterms:description "Two-letter ISO 3166-1 alpha-2 country code (e.g. `DE`, `AT`, `CH`, `US`). Canonical codebook key for the FiscalJurisdiction entity — used as the indexed attribute that makes country lookups O(1). The two-letter form is the universal join key across Odoo (`res.country.code`), Peppol/UBL (`ram:CountryCode`), SWIFT BIC country segment, and OFAC sanctions list jurisdiction filters."; + dcterms:description "Two-letter ISO 3166-1 alpha-2 country code (for example `DE`, `AT`, `CH`, `US`). The indexed key of FiscalJurisdiction: one jurisdiction per code. The same two-letter code is used by Peppol/UBL, by the country segment of a SWIFT BIC and by sanctions-list jurisdiction filters."; dcterms:valid "start=2026-05-28;"; - dcterms:creator "Claude (AdaWorldAPI/lance-graph 3-hop optim)"; + dcterms:creator "Claude (AdaWorldAPI)"; . diff --git a/NTO/Accounting/attributes/productCategoryComplete.ttl b/NTO/Accounting/attributes/productCategoryComplete.ttl deleted file mode 100644 index 60dc51dc72..0000000000 --- a/NTO/Accounting/attributes/productCategoryComplete.ttl +++ /dev/null @@ -1,14 +0,0 @@ -@prefix ogit.Accounting: . -@prefix ogit: . -@prefix owl: . -@prefix rdfs: . -@prefix dcterms: . - -ogit.Accounting:productCategoryComplete - a owl:DatatypeProperty; - rdfs:subPropertyOf ogit:Attribute; - rdfs:label "productCategoryComplete"; - dcterms:description "Slash-separated full category path of a product (e.g. `All / Saleable / Goods`). Denormalised root-level promotion of the Odoo 3-hop chain `product_id.product_tmpl_id.categ_id.complete_name` (and the 2-hop variant `product_id.categ_id.complete_name`). Hot path for tax-category routing, MwSt-Satz selection (SKR03/SKR04 mapping), and inventory cost-method dispatch. Recomputed on product template or category change."; - dcterms:valid "start=2026-05-28;"; - dcterms:creator "Claude (AdaWorldAPI/lance-graph 3-hop optim)"; -. diff --git a/NTO/Accounting/attributes/vatRateStandard.ttl b/NTO/Accounting/attributes/vatRateStandard.ttl index 3f7015bd32..68755263a3 100644 --- a/NTO/Accounting/attributes/vatRateStandard.ttl +++ b/NTO/Accounting/attributes/vatRateStandard.ttl @@ -8,7 +8,7 @@ ogit.Accounting:vatRateStandard a owl:DatatypeProperty; rdfs:subPropertyOf ogit:Attribute; rdfs:label "vatRateStandard"; - dcterms:description "Standard VAT / Mehrwertsteuer rate of this fiscal jurisdiction, expressed as a decimal fraction (e.g. `0.19` for the German 19% Regelsteuersatz). Codebook attribute on FiscalJurisdiction. Reduced rates and special exemptions are not modelled here — use the per-jurisdiction Tax entity for those."; + dcterms:description "Standard VAT rate of this fiscal jurisdiction as a decimal fraction (for example `0.19` for 19%). Reduced rates and exemptions are not modelled here; use the jurisdiction's Tax entity for those."; dcterms:valid "start=2026-05-28;"; - dcterms:creator "Claude (AdaWorldAPI/lance-graph 3-hop optim)"; + dcterms:creator "Claude (AdaWorldAPI)"; . diff --git a/NTO/Accounting/entities/FiscalJurisdiction.ttl b/NTO/Accounting/entities/FiscalJurisdiction.ttl index 8a7ae84cd4..b68caea42c 100644 --- a/NTO/Accounting/entities/FiscalJurisdiction.ttl +++ b/NTO/Accounting/entities/FiscalJurisdiction.ttl @@ -9,9 +9,9 @@ ogit.Accounting:FiscalJurisdiction a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "FiscalJurisdiction"; - dcterms:description "Codebook entry pinning a fiscal jurisdiction by ISO 3166-1 alpha-2 code. The canonical lookup target for `hasFiscalCountry` edges and the resolved leaf of the Odoo 3-hop chain `entity.company_id.account_fiscal_country_id`. Strict codebook semantics: one entry per ISO 3166-1 alpha-2 code, no duplicates. Standard VAT rate + EU membership are denormalised onto the entry so jurisdiction-conditional logic (reverse-charge, MOSS/OSS, GoBD applicability) reads as O(1) attribute access, not a downstream graph join. Cross-jurisdictional sanctions cross-reference is supported via an outbound edge to ogit.Compliance:SanctionsEntry when the jurisdiction maintains a sanctions programme."; + dcterms:description "A fiscal jurisdiction, identified by its ISO 3166-1 alpha-2 code: one entry per code. The target of hasFiscalCountry edges. Carries the standard VAT rate and EU membership, so jurisdiction-dependent rules (reverse charge, OSS, record-keeping obligations) read an attribute instead of following further edges. Links to a sanctions entry when the jurisdiction runs a sanctions programme."; dcterms:valid "start=2026-05-28;"; - dcterms:creator "Claude (AdaWorldAPI/lance-graph 3-hop optim)"; + dcterms:creator "Claude (AdaWorldAPI)"; ogit:scope "NTO"; ogit:parent ogit:Node; ogit:mandatory-attributes ( diff --git a/NTO/Accounting/entities/JournalEntry.ttl b/NTO/Accounting/entities/JournalEntry.ttl index 80d0600e57..17c697d6c1 100644 --- a/NTO/Accounting/entities/JournalEntry.ttl +++ b/NTO/Accounting/entities/JournalEntry.ttl @@ -8,9 +8,9 @@ ogit.Accounting:JournalEntry a rdfs:Class; rdfs:subClassOf ogit:Entity; rdfs:label "JournalEntry"; - dcterms:description "A double-entry accounting journal entry — the canonical OGIT projection of Odoo `account.move` (and the deeply analogous SAP `BSEG` document line, MS Dynamics `JournalLine`, DATEV `Buchung`). Demonstrates the 3-hop optimisation doctrine: instead of the lookups `entity.company_id.account_fiscal_country_id.code` (5+ Odoo sites) and `move.commercial_partner_id.country_id`, the leaf attributes are promoted onto JournalEntry directly (`fiscalCountryCode`, `commercialPartnerCountryCode`) and the intermediate hops are also accessible via the shortcut verb `hasFiscalCountry` for graph traversal. Both routes are kept — promoted attribute for hot-path reads, edge verb for cascade traversal — and the EdgeColumn ComputeRecompute cascade keeps them coherent."; + dcterms:description "A double-entry accounting journal entry: a dated, balanced set of debit and credit lines in one currency, with a status (for example draft or posted). The fiscal country of the owning company and the country of the counterparty are kept on the entry (fiscalCountryCode, counterpartyCountryCode) for VAT and sanctions checks; the hasFiscalCountry edge links the same jurisdiction as a node."; dcterms:valid "start=2026-05-28;"; - dcterms:creator "Claude (AdaWorldAPI/lance-graph 3-hop optim)"; + dcterms:creator "Claude (AdaWorldAPI)"; ogit:scope "NTO"; ogit:parent ogit:Node; ogit:mandatory-attributes ( @@ -25,13 +25,13 @@ ogit.Accounting:JournalEntry ogit:createdAt ogit:lastUpdatedAt ogit.Accounting:fiscalCountryCode - ogit.Accounting:commercialPartnerCountryCode + ogit.Accounting:counterpartyCountryCode ); ogit:indexed-attributes ( ogit:id ogit:status ogit.Accounting:fiscalCountryCode - ogit.Accounting:commercialPartnerCountryCode + ogit.Accounting:counterpartyCountryCode ); ogit:allowed ( [ ogit.Accounting:hasFiscalCountry ogit.Accounting:FiscalJurisdiction ] diff --git a/NTO/Accounting/verbs/hasFiscalCountry.ttl b/NTO/Accounting/verbs/hasFiscalCountry.ttl index b03a305bbb..82a28625c9 100644 --- a/NTO/Accounting/verbs/hasFiscalCountry.ttl +++ b/NTO/Accounting/verbs/hasFiscalCountry.ttl @@ -8,7 +8,7 @@ ogit.Accounting:hasFiscalCountry a owl:ObjectProperty; rdfs:subPropertyOf ogit:Verb; rdfs:label "hasFiscalCountry"; - dcterms:description "Direct edge from a fiscal entity (JournalEntry, CompanyEntity, FinancialInstrument, Tax) to its fiscal jurisdiction (FiscalJurisdiction codebook entry / FinancialMarket:Country). Collapses the Odoo 2-hop chain `entity.company_id.account_fiscal_country_id` and the 3-hop variant `entity.company_id.account_fiscal_country_id.code` into one typed edge in the EdgeColumn. Targets: ogit.Accounting:FiscalJurisdiction (preferred) or ogit.FinancialMarket:Country."; + dcterms:description "Links a fiscal entity (journal entry, company, financial instrument, tax) to the jurisdiction whose tax rules apply to it. Target: ogit.Accounting:FiscalJurisdiction, or ogit.FinancialMarket:Country."; dcterms:valid "start=2026-05-28;"; - dcterms:creator "Claude (AdaWorldAPI/lance-graph 3-hop optim)"; + dcterms:creator "Claude (AdaWorldAPI)"; . diff --git a/NTO/Accounting/verbs/hasPickingType.ttl b/NTO/Accounting/verbs/hasPickingType.ttl deleted file mode 100644 index 5968c905e9..0000000000 --- a/NTO/Accounting/verbs/hasPickingType.ttl +++ /dev/null @@ -1,14 +0,0 @@ -@prefix ogit.Accounting: . -@prefix ogit: . -@prefix owl: . -@prefix rdfs: . -@prefix dcterms: . - -ogit.Accounting:hasPickingType - a owl:ObjectProperty; - rdfs:subPropertyOf ogit:Verb; - rdfs:label "hasPickingType"; - dcterms:description "Direct edge from a stock move / move line to its picking-type configuration. Collapses the Odoo 3-hop chain `picking_id.picking_type_id.` into one typed edge that the EdgeColumn cascade can follow without intermediate hops. Used by warehouse routing + inventory-event dispatch."; - dcterms:valid "start=2026-05-28;"; - dcterms:creator "Claude (AdaWorldAPI/lance-graph 3-hop optim)"; -. diff --git a/NTO/Accounting/verbs/hasProductCategory.ttl b/NTO/Accounting/verbs/hasProductCategory.ttl deleted file mode 100644 index c3cbb1e745..0000000000 --- a/NTO/Accounting/verbs/hasProductCategory.ttl +++ /dev/null @@ -1,14 +0,0 @@ -@prefix ogit.Accounting: . -@prefix ogit: . -@prefix owl: . -@prefix rdfs: . -@prefix dcterms: . - -ogit.Accounting:hasProductCategory - a owl:ObjectProperty; - rdfs:subPropertyOf ogit:Verb; - rdfs:label "hasProductCategory"; - dcterms:description "Direct edge from a line item / stock move / sale order line to its product category. Collapses the Odoo 3-hop chain `line.product_id.product_tmpl_id.categ_id` (and the 2-hop variant on simpler models) into one typed edge. Hot path for tax-mapping (SKR03 vs SKR04 routing), inventory valuation method dispatch, and reporting aggregation."; - dcterms:valid "start=2026-05-28;"; - dcterms:creator "Claude (AdaWorldAPI/lance-graph 3-hop optim)"; -.