From 61a8c244daefcd03010a20b8b9c3a008afe8d3c0 Mon Sep 17 00:00:00 2001 From: schroeder5 <s.schroeder@fz-juelich.de> Date: Fri, 29 Jan 2021 08:55:44 +0000 Subject: [PATCH] enabled saving onthologies in different formats --- toardb/utils/TOARII_ontology.py | 104 ++++++++++++++++++++++++++++++-- 1 file changed, 98 insertions(+), 6 deletions(-) diff --git a/toardb/utils/TOARII_ontology.py b/toardb/utils/TOARII_ontology.py index d2ab10e..58eef45 100644 --- a/toardb/utils/TOARII_ontology.py +++ b/toardb/utils/TOARII_ontology.py @@ -33,7 +33,7 @@ class TOAR_Ontology: get_class(title): find the onthology class for the given title - get_class_by_id(self, id): + get_class_by_id(id): find the onthology class for the given id show_class_definition(ont_class): @@ -42,7 +42,7 @@ class TOAR_Ontology: show_entries(ont_class): show information on given ontology class - add_entry(self, ont_class, idcount, label, definition): + add_entry(ont_class, idcount, label, definition): add entry to given ontology class check_entry(entry, ont_class): @@ -51,14 +51,24 @@ class TOAR_Ontology: print(format=""): Prints the onthology in the given format - save(self, filename): - save the onthology in json-ld format to the given file + save(filename, format): + save the onthology in given format to the given file """ def __init__(self, filename): """ initialize the onthology + + Parameters + ---------- + filename: str + filename containing the ontology in json-ld format + + Returns + ------- + TOAR_Ontology """ + self.filename = filename g = rdflib.Graph() self.graph = g.parse(self.filename,format='json-ld') @@ -66,6 +76,15 @@ class TOAR_Ontology: def get_class(self, title): """ find the onthology class for the given title + + Parameters + ---------- + title: str + title of class + + Returns + ------- + OWL.Class """ for s, p, o in self.graph.triples( (None, RDF.type, OWL.Class) ): value = self.graph.value(subject=s,predicate=RDFS.label) @@ -76,6 +95,15 @@ class TOAR_Ontology: def get_class_by_id(self, id): """ find the onthology class for the given id + + Parameters + ---------- + id: str + id of class + + Returns + ------- + OWL.Class """ for s, p, o in self.graph.triples( (None, RDF.type, OWL.Class) ): if s.strip() == id.strip(): @@ -85,6 +113,15 @@ class TOAR_Ontology: def show_class_definition(self, ont_class): """ show information on given ontology class + + Parameters + ---------- + ont_class: OWL.class + onthology class + + Returns + ------- + None """ for s, p, o in self.graph.triples( (ont_class, SKOS.definition, None) ): print(f"definition of {ont_class}: {o}") @@ -92,6 +129,15 @@ class TOAR_Ontology: def show_entries(self, ont_class): """ show information on given ontology class + + Parameters + ---------- + ont_class: OWL.class + onthology class + + Returns + ------- + None """ for s, p, o in self.graph.triples( (None, RDF.type, ont_class ) ): label=self.graph.value(subject=s,predicate=RDFS.label) @@ -102,6 +148,21 @@ class TOAR_Ontology: def add_entry(self, ont_class, idcount, label, definition): """ add entry to given ontology class + + Parameters + ---------- + ont_class: OWL.class + onthology class + id_count: int + integer for constructing ID "OWLNamedIndividual_nnnnnn" + label: str + title of entry to be inserted + definition: str + definition of entry to be inserted + + Returns + ------- + None """ # still to do: # how to get rid of "http://www.fz-juelich.de/ontologies/2020/ToarOntotology"?! @@ -134,6 +195,17 @@ class TOAR_Ontology: def check_entry(self, entry, ont_class): """ check whether entry is a valid value of the ontology + + Parameters + ---------- + entry: str + title of entry to be checked + ont_class: OWL.class + onthology class + + Returns + ------- + None """ found=False for s, p, o in self.graph.triples( (None, RDF.type, ont_class ) ): @@ -144,15 +216,35 @@ class TOAR_Ontology: def print(self, format='json-ld'): """ print the onthology in the given format + + Parameters + ---------- + format: str, optional + output format (default: json-ld) + + Returns + ------- + None """ print(self.graph.serialize(format=format).decode("utf-8")) - def save(self, filename): + def save(self, filename, format='json-ld'): """ save the onthology in json-ld format to the given file + + Parameters + ---------- + filename: str + output file name + format: str, optional + output format (default: json-ld) + + Returns + ------- + None """ outfile = open(filename,'w') - outfile.write(self.graph.serialize(format='json-ld').decode("utf-8")) + outfile.write(self.graph.serialize(format=format).decode("utf-8")) # #check_entry would have been nicer, if something like this worked: # subj2 = rdflib.URIRef("http://www.fz-juelich.de/ontologies/2020/ToarOntotology#OWLNamedIndividual_000141") -- GitLab