From 154e20a0f17582406f4b358899e66db17467cf22 Mon Sep 17 00:00:00 2001 From: Jim Balhoff Date: Mon, 17 Oct 2022 12:06:32 -0400 Subject: [PATCH 1/3] Maintain correct set of in_taxon model annotations. --- .../BlazegraphMolecularModelManager.java | 88 ++++++++++++++----- .../minerva/BlazegraphOntologyManager.java | 19 +--- 2 files changed, 68 insertions(+), 39 deletions(-) diff --git a/minerva-core/src/main/java/org/geneontology/minerva/BlazegraphMolecularModelManager.java b/minerva-core/src/main/java/org/geneontology/minerva/BlazegraphMolecularModelManager.java index 940e8d01..c2fca9da 100644 --- a/minerva-core/src/main/java/org/geneontology/minerva/BlazegraphMolecularModelManager.java +++ b/minerva-core/src/main/java/org/geneontology/minerva/BlazegraphMolecularModelManager.java @@ -30,11 +30,14 @@ import org.semanticweb.owlapi.rio.RioMemoryTripleSource; import org.semanticweb.owlapi.rio.RioRenderer; +import javax.annotation.Nonnull; import java.io.*; import java.util.*; import java.util.Map.Entry; import java.util.stream.Collectors; +import static org.geneontology.minerva.BlazegraphOntologyManager.in_taxon; + public class BlazegraphMolecularModelManager extends CoreMolecularModelManager { private static Logger LOG = Logger @@ -77,6 +80,7 @@ public BlazegraphMolecularModelManager(OWLOntology tbox, CurieHandler curieHandl this.curieHandler = curieHandler; this.pathToOWLStore = pathToJournal; this.pathToExportFolder = pathToExportFolder; + this.addPreFileSaveHandler(new ModelTaxonSaveHandler()); this.repo = initializeRepository(this.pathToOWLStore); } @@ -179,18 +183,9 @@ public void saveAllModels() * @throws RepositoryException * @throws UnknownIdentifierException */ - public void saveModel(ModelContainer m) - throws OWLOntologyStorageException, OWLOntologyCreationException, - IOException, RepositoryException, UnknownIdentifierException { + public void saveModel(ModelContainer m) throws IOException, RepositoryException, UnknownIdentifierException { IRI modelId = m.getModelId(); - OWLOntology ont2save = m.getAboxOntology(); - Set taxa = getTaxonsForModel(modelId.toString()); - if (taxa != null) { - for (String taxon : taxa) { - ont2save = getGolego_repo().addTaxonModelMetaData(ont2save, IRI.create(taxon)); - } - } - final OWLOntology ont = ont2save; + final OWLOntology ont = m.getAboxOntology(); final OWLOntologyManager manager = ont.getOWLOntologyManager(); List changes = preSaveFileHandler(ont); synchronized (ont) { @@ -250,6 +245,11 @@ private List preSaveFileHandler(OWLOntology model) throws Unk return allChanges; } + /** + * A PreFileSaveHandler may make changes to a model, + * returning the list of changes it made. Callers will + * assume that changes have been applied. + */ public static interface PreFileSaveHandler { public List handle(OWLOntology model) throws UnknownIdentifierException; @@ -262,6 +262,40 @@ public void addPreFileSaveHandler(PreFileSaveHandler handler) { } } + private final class ModelTaxonSaveHandler implements PreFileSaveHandler { + + @Override + public List handle(OWLOntology model) throws UnknownIdentifierException { + OWLDataFactory factory = OWLManager.getOWLDataFactory(); + final Set existingTaxonAnnotations = model.getAnnotations().stream() + .filter(ann -> ann.getProperty().equals(in_taxon)) + .collect(Collectors.toSet()); + final Set existingTaxa = existingTaxonAnnotations.stream() + .map(OWLAnnotation::getValue) + .filter(OWLObject::isIRI) + .map(v -> v.asIRI().get()) + .collect(Collectors.toSet()); + Set taxa = getTaxaForModel(model); + final Set annotationsToRemove = existingTaxonAnnotations.stream() + .filter(ann -> !taxa.contains(ann.getValue())) + .collect(Collectors.toSet()); + final Set taxaToAdd = taxa.stream() + .filter(t -> !existingTaxa.contains(t)) + .collect(Collectors.toSet()); + final Set removals = annotationsToRemove.stream() + .map(ann -> new RemoveOntologyAnnotation(model, ann)) + .collect(Collectors.toSet()); + final Set additions = taxaToAdd.stream() + .map(t -> new AddOntologyAnnotation(model, factory.getOWLAnnotation(in_taxon, t))) + .collect(Collectors.toSet()); + final List changes = new ArrayList<>(); + changes.addAll(removals); + changes.addAll(additions); + model.getOWLOntologyManager().applyChanges(changes); + return changes; + } + } + /** * Export the ABox for the given modelId in the default * {@link OWLDocumentFormat}. @@ -838,13 +872,13 @@ public void dispose() { } } - public Map> buildTaxonModelMap() throws IOException { + public Map> buildTaxonModelMap() throws IOException { Map> model_genes = buildModelGeneMap(); - Map> taxon_models = new HashMap>(); + Map> taxon_models = new HashMap>(); for (String model : model_genes.keySet()) { Set genes = model_genes.get(model); - Set taxa = this.getGolego_repo().getTaxaByGenes(genes); - for (String taxon : taxa) { + Set taxa = this.getGolego_repo().getTaxaByGenes(genes); + for (IRI taxon : taxa) { Set models = taxon_models.get(taxon); if (models == null) { models = new HashSet(); @@ -895,14 +929,20 @@ public Map> buildModelGeneMap() { return model_genes; } - public Set getTaxonsForModel(String model_id) throws IOException { - Set genes = getModelGenes(model_id); + @Nonnull + public Set getTaxaForModel(OWLOntology model) { + String modelID = model.getOntologyID().getOntologyIRI().get().toString(); + Set genes = getModelGenes(modelID); if (genes.isEmpty()) { - return null; + return Collections.emptySet(); + } else { + try { + return this.getGolego_repo().getTaxaByGenes(genes); + } catch (IOException e) { + LOG.error("Error querying ontology Blazegraph", e); + return Collections.emptySet(); + } } - Set taxa = this.getGolego_repo().getTaxaByGenes(genes); - return taxa; - } public Set getModelGenes(String model_id) { @@ -942,16 +982,16 @@ public Set getModelGenes(String model_id) { public void addTaxonMetadata() throws IOException { - Map> taxon_models = buildTaxonModelMap(); + Map> taxon_models = buildTaxonModelMap(); LOG.info("Ready to update " + taxon_models.keySet().size() + " " + taxon_models.keySet()); - for (String taxon : taxon_models.keySet()) { + for (IRI taxon : taxon_models.keySet()) { LOG.info("Updating models in taxon " + taxon); Set models = taxon_models.get(taxon); models.stream().parallel().forEach(model -> { //fine for a few thousand models, but ends up eating massive ram for many //addTaxonWithOWL(IRI.create(model), IRI.create(taxon)); try { - addTaxonToDatabaseWithSparql(IRI.create(model), IRI.create(taxon)); + addTaxonToDatabaseWithSparql(IRI.create(model), taxon); } catch (RepositoryException | UpdateExecutionException | MalformedQueryException e) { // TODO Auto-generated catch block e.printStackTrace(); diff --git a/minerva-core/src/main/java/org/geneontology/minerva/BlazegraphOntologyManager.java b/minerva-core/src/main/java/org/geneontology/minerva/BlazegraphOntologyManager.java index e9f54f4a..82a67f09 100644 --- a/minerva-core/src/main/java/org/geneontology/minerva/BlazegraphOntologyManager.java +++ b/minerva-core/src/main/java/org/geneontology/minerva/BlazegraphOntologyManager.java @@ -95,15 +95,6 @@ public BigdataSailRepository getGo_lego_repo() { return go_lego_repo; } - public OWLOntology addTaxonModelMetaData(OWLOntology model, IRI taxon_iri) { - OWLOntologyManager ontman = model.getOWLOntologyManager(); - OWLDataFactory df = ontman.getOWLDataFactory(); - OWLAnnotation taxon_anno = df.getOWLAnnotation(in_taxon, taxon_iri); - OWLAxiom taxonannoaxiom = df.getOWLAnnotationAssertionAxiom(model.getOntologyID().getOntologyIRI().get(), taxon_anno); - ontman.addAxiom(model, taxonannoaxiom); - return model; - } - public void unGunzipFile(String compressedFile, String decompressedFile) { byte[] buffer = new byte[1024]; try { @@ -621,13 +612,13 @@ public void dispose() { } } - public Set getTaxaByGenes(Set genes) throws IOException { + public Set getTaxaByGenes(Set genes) throws IOException { String expansion = "VALUES ?gene { "; for (String gene : genes) { expansion += "<" + gene + "> \n"; } expansion += " } . \n"; - Set taxa = new HashSet(); + Set taxa = new HashSet<>(); try { BigdataSailRepositoryConnection connection = go_lego_repo.getReadOnlyConnection(); try { @@ -647,13 +638,11 @@ public Set getTaxaByGenes(Set genes) throws IOException { Value v = binding.getValue("taxon"); //ignore anonymous sub classes if (v instanceof URI) { - String taxon = binding.getValue("taxon").stringValue(); + IRI taxon = IRI.create(binding.getValue("taxon").stringValue()); taxa.add(taxon); } } - } catch (MalformedQueryException e) { - throw new IOException(e); - } catch (QueryEvaluationException e) { + } catch (MalformedQueryException | QueryEvaluationException e) { throw new IOException(e); } finally { connection.close(); From f6b0788e9a93a809e210b0f6d2f1c644f5362854 Mon Sep 17 00:00:00 2001 From: Jim Balhoff Date: Mon, 17 Oct 2022 14:50:46 -0400 Subject: [PATCH 2/3] Add test; stop changes from being rolled back. --- .../BlazegraphMolecularModelManager.java | 6 +++-- .../BlazegraphMolecularModelManagerTest.java | 26 +++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/minerva-core/src/main/java/org/geneontology/minerva/BlazegraphMolecularModelManager.java b/minerva-core/src/main/java/org/geneontology/minerva/BlazegraphMolecularModelManager.java index c2fca9da..9b271d29 100644 --- a/minerva-core/src/main/java/org/geneontology/minerva/BlazegraphMolecularModelManager.java +++ b/minerva-core/src/main/java/org/geneontology/minerva/BlazegraphMolecularModelManager.java @@ -80,7 +80,6 @@ public BlazegraphMolecularModelManager(OWLOntology tbox, CurieHandler curieHandl this.curieHandler = curieHandler; this.pathToOWLStore = pathToJournal; this.pathToExportFolder = pathToExportFolder; - this.addPreFileSaveHandler(new ModelTaxonSaveHandler()); this.repo = initializeRepository(this.pathToOWLStore); } @@ -187,8 +186,11 @@ public void saveModel(ModelContainer m) throws IOException, RepositoryException, IRI modelId = m.getModelId(); final OWLOntology ont = m.getAboxOntology(); final OWLOntologyManager manager = ont.getOWLOntologyManager(); - List changes = preSaveFileHandler(ont); synchronized (ont) { + // This handler is not in the preSaveFileHandler list, because changes by those + // handlers are rolled back after save. + new ModelTaxonSaveHandler().handle(ont); + List changes = preSaveFileHandler(ont); try { this.writeModelToDatabase(ont, modelId); // reset modified flag for abox after successful save diff --git a/minerva-core/src/test/java/org/geneontology/minerva/BlazegraphMolecularModelManagerTest.java b/minerva-core/src/test/java/org/geneontology/minerva/BlazegraphMolecularModelManagerTest.java index 6889f506..957059ee 100644 --- a/minerva-core/src/test/java/org/geneontology/minerva/BlazegraphMolecularModelManagerTest.java +++ b/minerva-core/src/test/java/org/geneontology/minerva/BlazegraphMolecularModelManagerTest.java @@ -23,7 +23,9 @@ import java.io.FileInputStream; import java.io.IOException; import java.util.*; +import java.util.stream.Collectors; +import static org.geneontology.minerva.BlazegraphOntologyManager.in_taxon; import static org.junit.Assert.*; public class BlazegraphMolecularModelManagerTest { @@ -56,6 +58,30 @@ public void testImportDump() throws Exception { m3.dispose(); } + @Test + public void testTaxonAnnotationMaintenance() throws Exception { + IRI human = IRI.create("http://purl.obolibrary.org/obo/NCBITaxon_9606"); + IRI boar = IRI.create("http://purl.obolibrary.org/obo/NCBITaxon_9823"); + String sourceModelPath = "src/test/resources/test-model-taxon-annotations.ttl"; + IRI modelIRI = IRI.create("http://model.geneontology.org/62183af000000536"); + BlazegraphMolecularModelManager m3 = createBlazegraphMolecularModelManager(); + m3.importModelToDatabase(new File(sourceModelPath), false); + ModelContainer model = m3.getModel(modelIRI); + Set previousTaxonIRIs = model.getAboxOntology().getAnnotations().stream() + .filter(a -> a.getProperty().equals(in_taxon)) + .map(a -> a.getValue().asIRI().get()) + .collect(Collectors.toSet()); + assertTrue(previousTaxonIRIs.contains(human)); + assertTrue(previousTaxonIRIs.contains(boar)); + m3.saveModel(model); + Set newTaxonIRIs = model.getAboxOntology().getAnnotations().stream() + .filter(a -> a.getProperty().equals(in_taxon)) + .map(a -> a.getValue().asIRI().get()) + .collect(Collectors.toSet()); + assertTrue(newTaxonIRIs.contains(human)); + assertFalse(newTaxonIRIs.contains(boar)); + } + @Test public void testRemoveImportsDuringImport() throws Exception { String sourceModelPath = "src/test/resources/dummy-noctua-modelwith-import.ttl"; From 1fbfb9f0caa190252f7c3b2346c39b226f4b2003 Mon Sep 17 00:00:00 2001 From: Jim Balhoff Date: Mon, 17 Oct 2022 15:30:47 -0400 Subject: [PATCH 3/3] Add test file to git. --- .../test-model-taxon-annotations.ttl | 653 ++++++++++++++++++ 1 file changed, 653 insertions(+) create mode 100644 minerva-core/src/test/resources/test-model-taxon-annotations.ttl diff --git a/minerva-core/src/test/resources/test-model-taxon-annotations.ttl b/minerva-core/src/test/resources/test-model-taxon-annotations.ttl new file mode 100644 index 00000000..26288514 --- /dev/null +++ b/minerva-core/src/test/resources/test-model-taxon-annotations.ttl @@ -0,0 +1,653 @@ +@prefix : . +@prefix owl: . +@prefix rdf: . +@prefix xml: . +@prefix xsd: . +@prefix rdfs: . +@base . + + rdf:type owl:Ontology ; + owl:versionIRI ; + "production"^^xsd:string ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-16"^^xsd:string ; + "DNA damage sensor activity of SIRT6 and its regulation by SIRT1 (Human)"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string ; + , + . + +################################################################# +# Annotation properties +################################################################# + +### http://geneontology.org/lego/evidence + rdf:type owl:AnnotationProperty . + + +### http://geneontology.org/lego/modelstate + rdf:type owl:AnnotationProperty . + + +### http://geneontology.org/lego/hint/layout/x + rdf:type owl:AnnotationProperty . + + +### http://geneontology.org/lego/hint/layout/y + rdf:type owl:AnnotationProperty . + + +### http://purl.org/dc/elements/1.1/contributor + rdf:type owl:AnnotationProperty . + + +### http://purl.org/dc/elements/1.1/date + rdf:type owl:AnnotationProperty . + + +### http://purl.org/dc/elements/1.1/source + rdf:type owl:AnnotationProperty . + + +### http://purl.org/dc/elements/1.1/title + rdf:type owl:AnnotationProperty . + + +### http://purl.org/pav/providedBy + rdf:type owl:AnnotationProperty . + + +### https://w3id.org/biolink/vocab/in_taxon + rdf:type owl:AnnotationProperty . + + +################################################################# +# Object Properties +################################################################# + +### http://purl.obolibrary.org/obo/BFO_0000050 + rdf:type owl:ObjectProperty . + + +### http://purl.obolibrary.org/obo/BFO_0000066 + rdf:type owl:ObjectProperty . + + +### http://purl.obolibrary.org/obo/RO_0002233 + rdf:type owl:ObjectProperty . + + +### http://purl.obolibrary.org/obo/RO_0002333 + rdf:type owl:ObjectProperty . + + +### http://purl.obolibrary.org/obo/RO_0002629 + rdf:type owl:ObjectProperty . + + +################################################################# +# Classes +################################################################# + +### http://identifiers.org/uniprot/Q8N6T7 + rdf:type owl:Class . + + +### http://identifiers.org/uniprot/Q96EB6 + rdf:type owl:Class . + + +### http://purl.obolibrary.org/obo/ECO_0000314 + rdf:type owl:Class . + + +### http://purl.obolibrary.org/obo/GO_0003684 + rdf:type owl:Class . + + +### http://purl.obolibrary.org/obo/GO_0034979 + rdf:type owl:Class . + + +### http://purl.obolibrary.org/obo/GO_0035861 + rdf:type owl:Class . + + +### http://purl.obolibrary.org/obo/GO_0140612 + rdf:type owl:Class . + + +### http://purl.obolibrary.org/obo/GO_0140765 + rdf:type owl:Class . + + +### http://purl.obolibrary.org/obo/GO_2000781 + rdf:type owl:Class . + + +################################################################# +# Individuals +################################################################# + +### http://model.geneontology.org/62183af000000536/62183af000000537 + rdf:type owl:NamedIndividual , + ; + ; + ; + ; + ; + "346.25"^^xsd:string ; + "10.25"^^xsd:string ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + +[ rdf:type owl:Axiom ; + owl:annotatedSource ; + owl:annotatedProperty ; + owl:annotatedTarget ; + , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string + ] . + +[ rdf:type owl:Axiom ; + owl:annotatedSource ; + owl:annotatedProperty ; + owl:annotatedTarget ; + , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string + ] . + +[ rdf:type owl:Axiom ; + owl:annotatedSource ; + owl:annotatedProperty ; + owl:annotatedTarget ; + , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string + ] . + +[ rdf:type owl:Axiom ; + owl:annotatedSource ; + owl:annotatedProperty ; + owl:annotatedTarget ; + , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string + ] . + + +### http://model.geneontology.org/62183af000000536/62183af000000538 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000539 + rdf:type owl:NamedIndividual , + ; + "31"^^xsd:string ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000540 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000541 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:32538779"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000542 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:31995034"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000544 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:31995034"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000545 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:32538779"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000546 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:31995034"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000547 + rdf:type owl:NamedIndividual , + ; + ; + ; + ; + ; + "336.5"^^xsd:string ; + "366.25"^^xsd:string ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + +[ rdf:type owl:Axiom ; + owl:annotatedSource ; + owl:annotatedProperty ; + owl:annotatedTarget ; + , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string + ] . + +[ rdf:type owl:Axiom ; + owl:annotatedSource ; + owl:annotatedProperty ; + owl:annotatedTarget ; + , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string + ] . + +[ rdf:type owl:Axiom ; + owl:annotatedSource ; + owl:annotatedProperty ; + owl:annotatedTarget ; + , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string + ] . + +[ rdf:type owl:Axiom ; + owl:annotatedSource ; + owl:annotatedProperty ; + owl:annotatedTarget ; + , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string + ] . + + +### http://model.geneontology.org/62183af000000536/62183af000000548 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000549 + rdf:type owl:NamedIndividual , + ; + "371"^^xsd:string ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000550 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000551 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:32538779"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000552 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:31995034"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000553 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:32538779"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000554 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:31995034"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000555 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:32538779"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000556 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:31995034"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000557 + rdf:type owl:NamedIndividual , + ; + ; + ; + ; + "900.7500410079956"^^xsd:string ; + "473.2500228881836"^^xsd:string ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + +[ rdf:type owl:Axiom ; + owl:annotatedSource ; + owl:annotatedProperty ; + owl:annotatedTarget ; + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string + ] . + +[ rdf:type owl:Axiom ; + owl:annotatedSource ; + owl:annotatedProperty ; + owl:annotatedTarget ; + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string + ] . + +[ rdf:type owl:Axiom ; + owl:annotatedSource ; + owl:annotatedProperty ; + owl:annotatedTarget ; + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string + ] . + + +### http://model.geneontology.org/62183af000000536/62183af000000558 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000559 + rdf:type owl:NamedIndividual , + ; + "1284.7500410079956"^^xsd:string ; + "522.0000228881836"^^xsd:string ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000560 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000561 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:23911928"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000562 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:23911928"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000563 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:23911928"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000571 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:32538779"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000572 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:31995034"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000575 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:32538779"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000576 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:32538779"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000577 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:31995034"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000578 + rdf:type owl:NamedIndividual , + ; + ; + ; + ; + ; + "851"^^xsd:string ; + "10.25"^^xsd:string ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + +[ rdf:type owl:Axiom ; + owl:annotatedSource ; + owl:annotatedProperty ; + owl:annotatedTarget ; + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string + ] . + +[ rdf:type owl:Axiom ; + owl:annotatedSource ; + owl:annotatedProperty ; + owl:annotatedTarget ; + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string + ] . + +[ rdf:type owl:Axiom ; + owl:annotatedSource ; + owl:annotatedProperty ; + owl:annotatedTarget ; + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string + ] . + +[ rdf:type owl:Axiom ; + owl:annotatedSource ; + owl:annotatedProperty ; + owl:annotatedTarget ; + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string + ] . + + +### http://model.geneontology.org/62183af000000536/62183af000000579 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000580 + rdf:type owl:NamedIndividual , + ; + "1178"^^xsd:string ; + "24"^^xsd:string ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000581 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000582 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:32538779"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000583 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:32538779"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000584 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:32538779"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### http://model.geneontology.org/62183af000000536/62183af000000585 + rdf:type owl:NamedIndividual , + ; + "https://orcid.org/0000-0001-7299-6685"^^xsd:string ; + "2022-03-01"^^xsd:string ; + "PMID:32538779"^^xsd:string ; + "https://www.uniprot.org"^^xsd:string . + + +### Generated by the OWL API (version 4.5.15) https://github.com/owlcs/owlapi