obo 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "minitest", ">= 0"
10
+ gem "yard", "~> 0.6.0"
11
+ gem "bundler", "~> 1.0.0"
12
+ gem "jeweler", "~> 1.6.0"
13
+ gem "rcov", ">= 0"
14
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,22 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ git (1.2.5)
5
+ jeweler (1.6.0)
6
+ bundler (~> 1.0.0)
7
+ git (>= 1.2.5)
8
+ rake
9
+ minitest (2.1.0)
10
+ rake (0.8.7)
11
+ rcov (0.9.9)
12
+ yard (0.6.8)
13
+
14
+ PLATFORMS
15
+ ruby
16
+
17
+ DEPENDENCIES
18
+ bundler (~> 1.0.0)
19
+ jeweler (~> 1.6.0)
20
+ minitest
21
+ rcov
22
+ yard (~> 0.6.0)
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 robsyme
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,19 @@
1
+ = obo
2
+
3
+ Description goes here.
4
+
5
+ == Contributing to obo
6
+
7
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
8
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
9
+ * Fork the project
10
+ * Start a feature/bugfix branch
11
+ * Commit and push until you are happy with your contribution
12
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
13
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
14
+
15
+ == Copyright
16
+
17
+ Copyright (c) 2011 robsyme. See LICENSE.txt for
18
+ further details.
19
+
data/Rakefile ADDED
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "obo"
18
+ gem.homepage = "http://github.com/robsyme/obo"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{A parser for the OBO flat file format}
21
+ gem.description = %Q{The OBO format is the text file format used by OBO-Edit, the open-source, platform-independent application for viewing and editing ontologies. The format is described here: http://www.geneontology.org/GO.format.obo-1_2.shtml}
22
+ gem.email = "rob.syme@gmail.com"
23
+ gem.authors = ["robsyme"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ require 'rcov/rcovtask'
36
+ Rcov::RcovTask.new do |test|
37
+ test.libs << 'test'
38
+ test.pattern = 'test/**/test_*.rb'
39
+ test.verbose = true
40
+ test.rcov_opts << '--exclude "gems/*"'
41
+ end
42
+
43
+ task :default => :test
44
+
45
+ require 'yard'
46
+ YARD::Rake::YardocTask.new
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/lib/obo.rb ADDED
@@ -0,0 +1,133 @@
1
+
2
+
3
+ module Obo
4
+
5
+ class Header
6
+ attr_reader :tagvalues
7
+
8
+ def initialize
9
+ @tagvalues = Hash.new{|h,k| h[k] = []}
10
+ end
11
+
12
+ def [](tag)
13
+ values = @tagvalues[tag]
14
+ values.length == 1 ? values.first : values
15
+ end
16
+
17
+ def add(tag,value)
18
+ @tagvalues[tag] << value
19
+ end
20
+ end
21
+
22
+ class Stanza
23
+ attr_reader :name
24
+ attr_reader :tagvalues
25
+
26
+ def initialize(name)
27
+ @name = name
28
+ @tagvalues = Hash.new{|h,k| h[k] = []}
29
+ end
30
+
31
+ def [](tag)
32
+ values = @tagvalues[tag]
33
+ case values.length
34
+ when 0
35
+ nil
36
+ when 1
37
+ values.first
38
+ else values
39
+ end
40
+ end
41
+
42
+ def add(tag,value)
43
+ @tagvalues[tag] << case value
44
+ when 'true'
45
+ true
46
+ when 'false'
47
+ false
48
+ else value
49
+ end
50
+ end
51
+
52
+ def method_missing(method, *args, &block)
53
+ values = self[method.to_s]
54
+
55
+ if values
56
+ return values
57
+ elsif method =~ /\?$/
58
+ self.send(method[0..-2])
59
+ else
60
+ raise NoMethodError, "No method #{method} on #{self.class}"
61
+ end
62
+
63
+ end
64
+ end
65
+
66
+
67
+ class Parser
68
+
69
+ STANZA_START = /^\[(.*?)\]/
70
+ TAG_VALUE = /^(.*?):([^!]*)/
71
+
72
+ def initialize(filename)
73
+ @header = nil
74
+ @io = File.open(filename)
75
+ end
76
+
77
+ def elements(io = @io)
78
+ Enumerator.new do |yielder|
79
+ header = Header.new
80
+ previous_line_position = io.pos
81
+ line = lines.next
82
+ until line.is_a? Stanza
83
+ header.add(*line)
84
+ previous_line_position = io.pos
85
+ line = lines.next
86
+ end
87
+ yielder << header
88
+ io.pos = previous_line_position
89
+
90
+ stanzas.each{|stanza| yielder << stanza}
91
+ end
92
+ end
93
+
94
+ def stanzas
95
+ Enumerator.new do |yielder|
96
+ stanza = lines.first{|line| line.is_a? Stanza}
97
+
98
+ lines.each do |line|
99
+ case line
100
+ when Array
101
+ stanza.add(*line)
102
+ when Stanza
103
+ yielder << stanza
104
+ stanza = line
105
+ end
106
+ end
107
+
108
+ end
109
+ end
110
+
111
+ def rewind(io = @io)
112
+ io.pos = 0
113
+ end
114
+
115
+ private
116
+
117
+ # Yields lines that are either Stanza name or tag-value pairs
118
+ def lines(io = @io)
119
+ Enumerator.new do |yielder|
120
+ while line = io.gets
121
+ case line.strip
122
+ when STANZA_START
123
+ yielder << Stanza.new($1.strip)
124
+ when TAG_VALUE
125
+ yielder << [$1.strip,$2.strip]
126
+ end
127
+ end
128
+ end
129
+ end
130
+
131
+ end
132
+ end
133
+
data/test/data/ro.obo ADDED
@@ -0,0 +1,235 @@
1
+ format-version: 1.2
2
+ saved-by: cjm
3
+ auto-generated-by: cjm
4
+ default-namespace: relationship
5
+ remark: <p>This ontology contains logical relations to be shared across the different OBO ontologies. Each OBO ontology is free to extend this set with relations specific to the biology within that ontology</p><div class="notes"><p>In the definitions, variables c, d, ..., p, q, ... range over instances of continuants and processes respectively. C, D, ..., P, Q, ... range over the corresponding classes</p><p> For a discussion of instance-level relations and also of additional axioms needed to infer transitivity and other properties of the relations listed above see <a href="http://genomebiology.com/2005/6/5/R46">http://genomebiology.com/2005/6/5/R46</a> or the OBO relations page hosted at <a href="http://obo.sourceforge.net/relationship">http://obo.sourceforge.net/relationship</a></div>
6
+ idspace: OBO_REL http://www.obofoundry.org/ro/ro.owl# "OBO Relation ontology official home on OBO Foundry"
7
+ remark: cvs version $Revision: 1.4 $
8
+ remark: release version 1.01
9
+
10
+ [Typedef]
11
+ id: OBO_REL:is_a
12
+ alt_id: OBO_REL:0000001
13
+ name: is_a
14
+ builtin: true
15
+ def: "For continuants: C is_a C' if and only if: given any c that instantiates C at a time t, c instantiates C' at t. For processes: P is_a P' if and only if: that given any p that instantiates P, then p instantiates P'." [PMID:15892874]
16
+ comment: The is_a relationship is considered axiomatic by the obo file format specification. In the representation of obo in OWL, where obo terms are represented as OWL classes, is_a is mapped on to the subClassOf axiom
17
+ exact_synonym: "is_subtype_of" []
18
+ xref: owl:subClassOf
19
+ is_reflexive: true
20
+ is_anti_symmetric: true
21
+ is_transitive: true
22
+
23
+ [Typedef]
24
+ id: OBO_REL:part_of
25
+ alt_id: OBO_REL:0000002
26
+ name: part_of
27
+ def: "For continuants: C part_of C' if and only if: given any c that instantiates C at a time t, there is some c' such that c' instantiates C' at time t, and c *part_of* c' at t. For processes: P part_of P' if and only if: given any p that instantiates P at a time t, there is some p' such that p' instantiates P' at time t, and p *part_of* p' at t. (Here *part_of* is the instance-level part-relation.)" [PMID:15892874]
28
+ comment: Parthood as a relation between instances: The primitive instance-level relation p part_of p1 is illustrated in assertions such as: this instance of rhodopsin mediated phototransduction part_of this instance of visual perception. This relation satisfies at least the following standard axioms of mereology: reflexivity (for all p, p part_of p); anti-symmetry (for all p, p1, if p part_of p1 and p1 part_of p then p and p1 are identical); and transitivity (for all p, p1, p2, if p part_of p1 and p1 part_of p2, then p part_of p2). Analogous axioms hold also for parthood as a relation between spatial regions. For parthood as a relation between continuants, these axioms need to be modified to take account of the incorporation of a temporal argument. Thus for example the axiom of transitivity for continuants will assert that if c part_of c1 at t and c1 part_of c2 at t, then also c part_of c2 at t. Parthood as a relation between classes: To define part_of as a relation between classes we again need to distinguish the two cases of continuants and processes, even though the explicit reference to instants of time now falls away. For continuants, we have C part_of C1 if and only if any instance of C at any time is an instance-level part of some instance of C1 at that time, as for example in: cell nucleus part_ of cell.
29
+ inverse_of_on_instance_level: OBO_REL:has_part
30
+ is_reflexive: true
31
+ is_anti_symmetric: true
32
+ is_transitive: true
33
+
34
+ [Typedef]
35
+ id: OBO_REL:has_part
36
+ alt_id: OBO_REL:0000003
37
+ name: has_part
38
+ inverse_of_on_instance_level: OBO_REL:part_of
39
+ is_reflexive: true
40
+ is_anti_symmetric: true
41
+ is_transitive: true
42
+
43
+ [Typedef]
44
+ id: OBO_REL:integral_part_of
45
+ alt_id: OBO_REL:0000004
46
+ name: integral_part_of
47
+ is_a: OBO_REL:part_of
48
+ def: "C integral_part_of C' if and only if: C part_of C' AND C' has_part C" [PMID:15892874]
49
+ inverse_of: OBO_REL:has_integral_part
50
+ is_reflexive: true
51
+ is_anti_symmetric: true
52
+ is_transitive: true
53
+
54
+ [Typedef]
55
+ id: OBO_REL:has_integral_part
56
+ alt_id: OBO_REL:0000005
57
+ name: has_integral_part
58
+ is_a: OBO_REL:has_part
59
+ inverse_of: OBO_REL:integral_part_of
60
+ is_reflexive: true
61
+ is_anti_symmetric: true
62
+ is_transitive: true
63
+
64
+ [Typedef]
65
+ id: OBO_REL:proper_part_of
66
+ alt_id: OBO_REL:0000006
67
+ name: proper_part_of
68
+ is_a: OBO_REL:part_of
69
+ def: "As for part_of, with the additional constraint that subject and object are distinct" [PMID:15892874]
70
+ inverse_of_on_instance_level: OBO_REL:has_proper_part
71
+ is_transitive: true
72
+
73
+ [Typedef]
74
+ id: OBO_REL:has_proper_part
75
+ alt_id: OBO_REL:0000007
76
+ name: has_proper_part
77
+ is_a: OBO_REL:has_part
78
+ inverse_of_on_instance_level: OBO_REL:proper_part_of
79
+ is_transitive: true
80
+
81
+ [Typedef]
82
+ id: OBO_REL:located_in
83
+ alt_id: OBO_REL:0000008
84
+ name: located_in
85
+ def: "C located_in C' if and only if: given any c that instantiates C at a time t, there is some c' such that: c' instantiates C' at time t and c *located_in* c'. (Here *located_in* is the instance-level location relation.)" [PMID:15892874]
86
+ comment: Location as a relation between instances: The primitive instance-level relation c located_in r at t reflects the fact that each continuant is at any given time associated with exactly one spatial region, namely its exact location. Following we can use this relation to define a further instance-level location relation - not between a continuant and the region which it exactly occupies, but rather between one continuant and another. c is located in c1, in this sense, whenever the spatial region occupied by c is part_of the spatial region occupied by c1. Note that this relation comprehends both the relation of exact location between one continuant and another which obtains when r and r1 are identical (for example, when a portion of fluid exactly fills a cavity), as well as those sorts of inexact location relations which obtain, for example, between brain and head or between ovum and uterus
87
+ inverse_of_on_instance_level: OBO_REL:location_of
88
+ is_transitive: true
89
+ is_reflexive: true
90
+
91
+ [Typedef]
92
+ id: OBO_REL:location_of
93
+ alt_id: OBO_REL:0000009
94
+ name: location_of
95
+ inverse_of_on_instance_level: OBO_REL:located_in
96
+ is_transitive: true
97
+ is_reflexive: true
98
+
99
+ [Typedef]
100
+ id: OBO_REL:contained_in
101
+ alt_id: OBO_REL:0000010
102
+ name: contained_in
103
+ inverse_of_on_instance_level: OBO_REL:contains
104
+ def: "C contained_in C' if and only if: given any instance c that instantiates C at a time t, there is some c' such that: c' instantiates C' at time t and c located_in c' at t, and it is not the case that c *overlaps* c' at t. (c' is a conduit or cavity.)" [PMID:15892874]
105
+ comment: Containment obtains in each case between material and immaterial continuants, for instance: lung contained_in thoracic cavity; bladder contained_in pelvic cavity. Hence containment is not a transitive relation. If c part_of c1 at t then we have also, by our definition and by the axioms of mereology applied to spatial regions, c located_in c1 at t. Thus, many examples of instance-level location relations for continuants are in fact cases of instance-level parthood. For material continuants location and parthood coincide. Containment is location not involving parthood, and arises only where some immaterial continuant is involved. To understand this relation, we first define overlap for continuants as follows: c1 overlap c2 at t =def for some c, c part_of c1 at t and c part_of c2 at t. The containment relation on the instance level can then be defined (see definition):
106
+
107
+ [Typedef]
108
+ id: OBO_REL:contains
109
+ alt_id: OBO_REL:0000011
110
+ name: contains
111
+ inverse_of_on_instance_level: OBO_REL:contained_in
112
+
113
+ [Typedef]
114
+ id: OBO_REL:adjacent_to
115
+ alt_id: OBO_REL:0000012
116
+ name: adjacent_to
117
+ def: "C adjacent to C' if and only if: given any instance c that instantiates C at a time t, there is some c' such that: c' instantiates C' at time t and c and c' are in spatial proximity" [PMID:15892874]
118
+ comment: Note that adjacent_to as thus defined is not a symmetric relation, in contrast to its instance-level counterpart. For it can be the case that Cs are in general such as to be adjacent to instances of C1 while no analogous statement holds for C1s in general in relation to instances of C. Examples are: nuclear membrane adjacent_to cytoplasm; seminal vesicle adjacent_to urinary bladder; ovary adjacent_to parietal pelvic peritoneum
119
+ instance_level_is_transitive: true
120
+
121
+ [Typedef]
122
+ id: OBO_REL:transformation_of
123
+ alt_id: OBO_REL:0000013
124
+ name: transformation_of
125
+ def: "Relation between two classes, in which instances retain their identity yet change their classification by virtue of some kind of transformation. Formally: C transformation_of C' if and only if given any c and any t, if c instantiates C at time t, then for some t', c instantiates C' at t' and t' earlier t, and there is no t2 such that c instantiates C at t2 and c instantiates C' at t2." [PMID:15892874]
126
+ comment: When an embryonic oenocyte (a type of insect cell) is transformed into a larval oenocyte, one and the same continuant entity preserves its identity while instantiating distinct classes at distinct times. The class-level relation transformation_of obtains between continuant classes C and C1 wherever each instance of the class C is such as to have existed at some earlier time as an instance of the distinct class C1 (see Figure 2 in paper). This relation is illustrated first of all at the molecular level of granularity by the relation between mature RNA and the pre-RNA from which it is processed, or between (UV-induced) thymine-dimer and thymine dinucleotide. At coarser levels of granularity it is illustrated by the transformations involved in the creation of red blood cells, for example, from reticulocyte to erythrocyte, and by processes of development, for example, from larva to pupa, or from (post-gastrular) embryo to fetus or from child to adult. It is also manifest in pathological transformations, for example, of normal colon into carcinomatous colon. In each such case, one and the same continuant entity instantiates distinct classes at different times in virtue of phenotypic changes.
127
+ is_transitive: true
128
+
129
+ [Typedef]
130
+ id: OBO_REL:transformed_into
131
+ alt_id: OBO_REL:0000014
132
+ name: transformed_into
133
+ comment: Obsoleted
134
+ is_obsolete: true
135
+
136
+ [Typedef]
137
+ id: OBO_REL:derives_from
138
+ alt_id: OBO_REL:0000015
139
+ name: derives_from
140
+ def: "Derivation on the instance level (*derives_from*) holds between distinct material continuants when one succeeds the other across a temporal divide in such a way that at least a biologically significant portion of the matter of the earlier continuant is inherited by the later. We say that one class C derives_from class C' if instances of C are connected to instances of C' via some chain of instance-level derivation relations. Example: osteocyte derives_from osteoblast. Formally: C derives_immediately_from C' if and only if: given any c and any t, if c instantiates C at time t, then there is some c' and some t', such that c' instantiates C' at t' and t' earlier-than t and c *derives_from* c'. C derives_from C' if and only if: there is an chain of immediate derivation relations connecting C to C'." [PMID:15892874]
141
+ comment: Derivation as a relation between instances. The temporal relation of derivation is more complex. Transformation, on the instance level, is just the relation of identity: each adult is identical to some child existing at some earlier time. Derivation on the instance-level is a relation holding between non-identicals. More precisely, it holds between distinct material continuants when one succeeds the other across a temporal divide in such a way that at least a biologically significant portion of the matter of the earlier continuant is inherited by the later. Thus we will have axioms to the effect that from c derives_from c1 we can infer that c and c1 are not identical and that there is some instant of time t such that c1 exists only prior to and c only subsequent to t. We will also be able to infer that the spatial region occupied by c as it begins to exist at t overlaps with the spatial region occupied by c1 as it ceases to exist in the same instant.
142
+ exact_synonym: "derived_from" []
143
+ inverse_of_on_instance_level: OBO_REL:derived_into
144
+ is_transitive: true
145
+
146
+ [Typedef]
147
+ id: OBO_REL:derived_into
148
+ alt_id: OBO_REL:0000016
149
+ name: derived_into
150
+ inverse_of_on_instance_level: OBO_REL:derives_from
151
+ is_transitive: true
152
+
153
+ [Typedef]
154
+ id: OBO_REL:preceded_by
155
+ alt_id: OBO_REL:0000017
156
+ name: preceded_by
157
+ def: "P preceded_by P' if and only if: given any process p that instantiates P at a time t, there is some process p' such that p' instantiates P' at time t', and t' is earlier than t. " [PMID:15892874]
158
+ comment: An example is: translation preceded_by transcription; aging preceded_by development (not however death preceded_by aging). Where derives_from links classes of continuants, preceded_by links classes of processes. Clearly, however, these two relations are not independent of each other. Thus if cells of type C1 derive_from cells of type C, then any cell division involving an instance of C1 in a given lineage is preceded_by cellular processes involving an instance of C. The assertion P preceded_by P1 tells us something about Ps in general: that is, it tells us something about what happened earlier, given what we know about what happened later. Thus it does not provide information pointing in the opposite direction, concerning instances of P1 in general; that is, that each is such as to be succeeded by some instance of P. Note that an assertion to the effect that P preceded_by P1 is rather weak; it tells us little about the relations between the underlying instances in virtue of which the preceded_by relation obtains. Typically we will be interested in stronger relations, for example in the relation immediately_preceded_by, or in relations which combine preceded_by with a condition to the effect that the corresponding instances of P and P1 share participants, or that their participants are connected by relations of derivation, or (as a first step along the road to a treatment of causality) that the one process in some way affects (for example, initiates or regulates) the other.
159
+ inverse_of_on_instance_level: OBO_REL:precedes
160
+ is_transitive: true
161
+
162
+ [Typedef]
163
+ id: OBO_REL:precedes
164
+ alt_id: OBO_REL:0000018
165
+ name: precedes
166
+ inverse_of_on_instance_level: OBO_REL:preceded_by
167
+ is_transitive: true
168
+
169
+ [Typedef]
170
+ id: OBO_REL:has_participant
171
+ alt_id: OBO_REL:0000019
172
+ name: has_participant
173
+ def: "P has_participant C if and only if: given any process p that instantiates P there is some continuant c, and some time t, such that: c instantiates C at t and c participates in p at t" [PMID:15892874]
174
+ comment: Has_participant is a primitive instance-level relation between a process, a continuant, and a time at which the continuant participates in some way in the process. The relation obtains, for example, when this particular process of oxygen exchange across this particular alveolar membrane has_participant this particular sample of hemoglobin at this particular time.
175
+ inverse_of_on_instance_level: OBO_REL:participates_in
176
+
177
+ [Typedef]
178
+ id: OBO_REL:participates_in
179
+ alt_id: OBO_REL:0000020
180
+ name: participates_in
181
+ inverse_of_on_instance_level: OBO_REL:has_participant
182
+
183
+ [Typedef]
184
+ id: OBO_REL:has_agent
185
+ alt_id: OBO_REL:0000021
186
+ name: has_agent
187
+ is_a: OBO_REL:has_participant
188
+ def: "As for has_participant, but with the additional condition that the component instance is causally active in the relevant process" [PMID:15892874]
189
+ inverse_of_on_instance_level: OBO_REL:agent_in
190
+
191
+ [Typedef]
192
+ id: OBO_REL:agent_in
193
+ alt_id: OBO_REL:0000022
194
+ name: agent_in
195
+ is_a: OBO_REL:participates_in
196
+ inverse_of_on_instance_level: OBO_REL:has_agent
197
+
198
+ [Typedef]
199
+ id: OBO_REL:instance_of
200
+ alt_id: OBO_REL:0000023
201
+ name: instance_of
202
+ builtin: true
203
+ def: "A relation between an instance and a class. For components: a primitive relation between a component instance and a class which it instantiates at a specific time. For processes: a primitive relation, between a process instance and a class which it instantiates, holding independently of time" [PMID:15892874]
204
+ comment: The instance_of relationship is considered axiomatic by the obo file format specification; ie it is taken for granted. The is_a relation is still included in this ontology for completeness
205
+
206
+ [Typedef]
207
+ id: OBO_REL:has_improper_part
208
+ alt_id: OBO_REL:0000024
209
+ name: has_improper_part
210
+ is_a: OBO_REL:has_part
211
+ inverse_of_on_instance_level: OBO_REL:improper_part_of
212
+ comment: See reasons for obsoletion of improper_part_of
213
+ is_reflexive: true
214
+ is_transitive: true
215
+ is_obsolete: true
216
+
217
+ [Typedef]
218
+ id: OBO_REL:improper_part_of
219
+ alt_id: OBO_REL:0000025
220
+ name: improper_part_of
221
+ is_a: OBO_REL:part_of
222
+ def: "As for part_of, with the additional constraint that subject and object may be identical" [PMID:15892874]
223
+ comment: OBSOLETE. The definition is "As for part_of, with the additional constraint that subject and object may be identical". However, part_of is already reflexive, therefore improper_part_of is identical to part_of. If read differently, as "improper_part_of is part_of but not proper_part_of",improper_part_of becomes identity. So, improper_part_of is either identical to part_of or to identity, and not an intuitive synonym for either of them. [Robert Hoehndorf]
224
+ inverse_of_on_instance_level: OBO_REL:has_improper_part
225
+ is_reflexive: true
226
+ is_transitive: true
227
+ is_obsolete: true
228
+
229
+
230
+ [Typedef]
231
+ id: OBO_REL:relationship
232
+ name: relationship
233
+ def: "A relationship between two classes (terms). Relationships between classes are expressed in terms of relations on underlying instances." [GOC:cjm]
234
+ is_obsolete: true
235
+ comment: this relation was superfluous, so it has been obsoleted