diff --git a/src/ontology/role-edit.owl b/src/ontology/role-edit.owl
new file mode 100644
index 00000000..2649b38b
--- /dev/null
+++ b/src/ontology/role-edit.owl
@@ -0,0 +1,274 @@
+Prefix(:=)
+Prefix(dc:=)
+Prefix(obo:=)
+Prefix(owl:=)
+Prefix(rdf:=)
+Prefix(xml:=)
+Prefix(xsd:=)
+Prefix(cito:=)
+Prefix(foaf:=)
+Prefix(rdfs:=)
+Prefix(swrl:=)
+Prefix(swrla:=)
+Prefix(swrlb:=)
+Prefix(subsets:=)
+Prefix(oboInOwl:=)
+
+
+Ontology(
+
+Import()
+Annotation(dc:description "ROle ontology."@en)
+
+Declaration(Class(obo:RO_0040001))
+Declaration(Class(obo:RO_0040002))
+Declaration(Class(obo:RO_0040003))
+Declaration(Class(obo:RO_0040004))
+Declaration(Class(obo:RO_0040005))
+Declaration(Class(obo:RO_0040006))
+Declaration(Class(obo:RO_0040007))
+Declaration(Class(obo:RO_0040008))
+Declaration(Class(obo:RO_0040009))
+Declaration(Class(obo:RO_0040010))
+Declaration(Class(obo:RO_0040011))
+Declaration(Class(obo:RO_0040012))
+Declaration(Class(obo:RO_0040013))
+Declaration(Class(obo:RO_0040014))
+Declaration(Class(obo:RO_0040015))
+Declaration(Class(obo:RO_0040016))
+Declaration(Class(obo:RO_0040017))
+Declaration(Class(obo:RO_0040018))
+Declaration(Class(obo:RO_0040019))
+Declaration(Class(obo:RO_0040020))
+Declaration(Class(obo:RO_0040021))
+Declaration(Class(obo:RO_0040022))
+Declaration(Class(obo:RO_0040023))
+Declaration(Class(obo:RO_0040024))
+Declaration(Class(obo:RO_0040025))
+Declaration(Class(obo:RO_0040026))
+Declaration(Class(obo:RO_0040027))
+Declaration(Class(obo:RO_0040032))
+Declaration(Class(obo:RO_0040033))
+
+
+
+############################
+# Classes
+############################
+
+# Class: obo:RO_0040001 (participant disposition)
+
+AnnotationAssertion(obo:IAO_0000115 obo:RO_0040001 "A disposition played by a participant in a process.")
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040001 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040001 "2018-07-07T23:00:17Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040001 "participant disposition")
+SubClassOf(obo:RO_0040001 obo:BFO_0000016)
+
+# Class: obo:RO_0040002 (primary agent function)
+
+AnnotationAssertion(obo:IAO_0000115 obo:RO_0040002 "A disposition played by a participant that acts to achieve the objectives of the directed process.")
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040002 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040002 "2018-07-07T23:00:24Z"^^xsd:dateTime)
+AnnotationAssertion(oboInOwl:hasExactSynonym obo:RO_0040002 "agent function")
+AnnotationAssertion(rdfs:label obo:RO_0040002 "primary agent function")
+EquivalentClasses(obo:RO_0040002 ObjectIntersectionOf(obo:BFO_0000034 obo:RO_0040013))
+SubClassOf(obo:RO_0040002 obo:RO_0040013)
+
+# Class: obo:RO_0040003 (input role)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040003 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040003 "2018-07-07T23:00:38Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040003 "input role")
+SubClassOf(obo:RO_0040003 obo:RO_0040021)
+DisjointUnion(obo:RO_0040003 obo:RO_0040006 obo:RO_0040007)
+
+# Class: obo:RO_0040004 (output role)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040004 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040004 "2018-07-07T23:00:45Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040004 "output role")
+SubClassOf(obo:RO_0040004 obo:RO_0040021)
+
+# Class: obo:RO_0040005 (catalyst function)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040005 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040005 "2018-07-07T23:01:46Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040005 "catalyst function")
+SubClassOf(obo:RO_0040005 obo:RO_0040002)
+
+# Class: obo:RO_0040006 (targeted input role)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040006 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040006 "2018-07-07T23:03:01Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040006 "targeted input role")
+EquivalentClasses(obo:RO_0040006 ObjectIntersectionOf(obo:RO_0040003 obo:RO_0040020))
+
+# Class: obo:RO_0040007 (non-targeted input role)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040007 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040007 "2018-07-07T23:03:22Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040007 "non-targeted input role")
+SubClassOf(obo:RO_0040007 obo:RO_0040003)
+
+# Class: obo:RO_0040008 (substrate role)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040008 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040008 "2018-07-07T23:04:11Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040008 "substrate role")
+SubClassOf(obo:RO_0040008 obo:RO_0040006)
+
+# Class: obo:RO_0040009 (transportee role)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040009 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040009 "2018-07-07T23:05:01Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040009 "transportee role")
+SubClassOf(obo:RO_0040009 obo:RO_0040006)
+
+# Class: obo:RO_0040010 (transporter function)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040010 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040010 "2018-07-07T23:05:10Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040010 "transporter function")
+SubClassOf(obo:RO_0040010 obo:RO_0040002)
+
+# Class: obo:RO_0040011 (modified input role)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040011 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040011 "2018-07-07T23:06:59Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040011 "modified input role")
+SubClassOf(obo:RO_0040011 obo:RO_0040006)
+
+# Class: obo:RO_0040012 (disassembled disposition)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040012 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040012 "2018-07-07T23:07:25Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040012 "disassembled disposition")
+SubClassOf(obo:RO_0040012 obo:RO_0040011)
+
+# Class: obo:RO_0040013 (directed process participant disposition)
+
+AnnotationAssertion(obo:IAO_0000115 obo:RO_0040013 "A disposition played in a process that is a realization of a function, or a causally connected set of function realizations.")
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040013 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040013 "2018-07-07T23:08:02Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040013 "directed process participant disposition")
+EquivalentClasses(obo:RO_0040013 ObjectSomeValuesFrom(obo:BFO_0000054 ObjectIntersectionOf(obo:BFO_0000015 ObjectSomeValuesFrom(obo:BFO_0000055 obo:BFO_0000034))))
+SubClassOf(obo:RO_0040013 obo:RO_0040001)
+DisjointUnion(obo:RO_0040013 obo:RO_0040002 obo:RO_0040003 obo:RO_0040004)
+
+# Class: obo:RO_0040014 (product role)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040014 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040014 "2018-07-07T23:10:08Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040014 "product role")
+SubClassOf(obo:RO_0040014 obo:RO_0040022)
+
+# Class: obo:RO_0040015 (cofactor role)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040015 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040015 "2018-07-07T23:12:34Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040015 "cofactor role")
+SubClassOf(obo:RO_0040015 obo:RO_0040026)
+
+# Class: obo:RO_0040016 (consumed disposition)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040016 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040016 "2018-07-07T23:16:16Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040016 "consumed disposition")
+SubClassOf(obo:RO_0040016 obo:RO_0040011)
+
+# Class: obo:RO_0040017 (barrier function)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040017 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040017 "2018-07-07T23:17:15Z"^^xsd:dateTime)
+AnnotationAssertion(oboInOwl:hasExactSynonym obo:RO_0040017 "A function that is realized by influencing the flow of movement of a material entity, either directly through physical blocking or indirectly through fields, etc.")
+AnnotationAssertion(rdfs:label obo:RO_0040017 "barrier function")
+SubClassOf(obo:RO_0040017 obo:RO_0040002)
+
+# Class: obo:RO_0040018 (intermediate output disposition)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040018 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040018 "2018-07-07T23:18:11Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040018 "intermediate output disposition")
+SubClassOf(obo:RO_0040018 obo:RO_0040023)
+
+# Class: obo:RO_0040019 (byproduct disposition)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040019 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040019 "2018-07-07T23:18:18Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040019 "byproduct disposition")
+SubClassOf(obo:RO_0040019 obo:RO_0040023)
+
+# Class: obo:RO_0040020 (targeted input or output role)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040020 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040020 "2018-07-07T23:19:19Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040020 "targeted input or output role")
+SubClassOf(obo:RO_0040020 obo:RO_0040021)
+
+# Class: obo:RO_0040021 (input or output role)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040021 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040021 "2018-07-07T23:19:56Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040021 "input or output role")
+SubClassOf(obo:RO_0040021 obo:BFO_0000023)
+SubClassOf(obo:RO_0040021 obo:RO_0040013)
+DisjointUnion(obo:RO_0040021 obo:RO_0040003 obo:RO_0040004)
+
+# Class: obo:RO_0040022 (targeted output role)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040022 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040022 "2018-07-07T23:21:13Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040022 "targeted output role")
+EquivalentClasses(obo:RO_0040022 ObjectIntersectionOf(obo:RO_0040004 obo:RO_0040020))
+
+# Class: obo:RO_0040023 (non-targeted output disposition)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040023 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040023 "2018-07-07T23:22:45Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040023 "non-targeted output disposition")
+SubClassOf(obo:RO_0040023 obo:RO_0040004)
+
+# Class: obo:RO_0040024 (regulator function)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040024 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040024 "2018-07-07T23:24:08Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040024 "regulator function")
+SubClassOf(obo:RO_0040024 obo:RO_0040002)
+
+# Class: obo:RO_0040025 (binding function)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040025 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040025 "2018-07-07T23:26:26Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040025 "binding function")
+SubClassOf(obo:RO_0040025 obo:RO_0040002)
+
+# Class: obo:RO_0040026 (helper input role)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040026 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040026 "2018-07-07T23:28:32Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040026 "helper input role")
+SubClassOf(obo:RO_0040026 obo:RO_0040007)
+
+# Class: obo:RO_0040027 (consumed reactant disposition)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040027 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040027 "2018-07-07T23:36:14Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040027 "consumed reactant disposition")
+SubClassOf(obo:RO_0040027 obo:RO_0040016)
+
+# Class: obo:RO_0040032 (maintenance of state)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040032 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040032 "2018-07-25T20:40:21Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040032 "maintenance of state")
+SubClassOf(obo:RO_0040032 obo:BFO_0000016)
+
+# Class: obo:RO_0040033 (maintenance of shape)
+
+AnnotationAssertion(oboInOwl:created_by obo:RO_0040033 "cjm"^^xsd:string)
+AnnotationAssertion(oboInOwl:creation_date obo:RO_0040033 "2018-07-25T20:40:52Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label obo:RO_0040033 "maintenance of shape")
+SubClassOf(obo:RO_0040033 obo:RO_0040032)
+
+
+)
\ No newline at end of file