Cross Reference: /ontohub/app/models/ontology.rb
ontology.rb revision a45d3d730a4a0428b96460e0484513fc4219662b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
d78d735dbf7c5ce5ae545eecd8ee2c052224db77ndclass Ontology < ActiveRecord::Base
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd # Ontohub Library Includes
e095ed6283178339b437a6f15ebcc8a08289fb0dnd include Commentable
acc36ab93565d2880447d535da6ca6e5feac7a70nd include Metadatable
acc36ab93565d2880447d535da6ca6e5feac7a70nd
2d94708883b3a36a39b2bc7982234b674d8cb7a1nd # Ontology Model Includes
2d94708883b3a36a39b2bc7982234b674d8cb7a1nd include GraphStructures::SpecificFetchers::Mappings
acc36ab93565d2880447d535da6ca6e5feac7a70nd include IRIUrlBuilder::Includeable
acc36ab93565d2880447d535da6ca6e5feac7a70nd include Ontology::AssociationsAndAttributes
acc36ab93565d2880447d535da6ca6e5feac7a70nd include Ontology::Categories
acc36ab93565d2880447d535da6ca6e5feac7a70nd include Ontology::ClassMethodsAndScopes
acc36ab93565d2880447d535da6ca6e5feac7a70nd include Ontology::Distributed
acc36ab93565d2880447d535da6ca6e5feac7a70nd include Ontology::FileExtensions
acc36ab93565d2880447d535da6ca6e5feac7a70nd include Ontology::Import
acc36ab93565d2880447d535da6ca6e5feac7a70nd include Ontology::Mappings
acc36ab93565d2880447d535da6ca6e5feac7a70nd include Ontology::Oops
acc36ab93565d2880447d535da6ca6e5feac7a70nd include Ontology::OwlClasses
acc36ab93565d2880447d535da6ca6e5feac7a70nd include Ontology::Searching
acc36ab93565d2880447d535da6ca6e5feac7a70nd include Ontology::Sentences
acc36ab93565d2880447d535da6ca6e5feac7a70nd include Ontology::States
acc36ab93565d2880447d535da6ca6e5feac7a70nd include Ontology::Symbols
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd include Ontology::Validations
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd include Ontology::Versions
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd # Multiple Class Features
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd include Aggregatable
8bb7126c063c34d63966733988411f72dfcb2294maczniak
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd class Ontology::DeleteError < StandardError; end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd delegate :permission?, to: :repository
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd delegate :unproven_theorems, to: :current_version
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd strip_attributes :only => [:name, :iri]
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def repository
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd @repository ||= Repository.find(repository_id)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def generate_name(name)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd match = name.match(%r{
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd \A
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd .+?
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd :// # A uri has a separation between schema and hierarchy
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd .+
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd (?:/|\#)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd (?<filename>[^/]+) # Match filename after a slash/hash
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd \z
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd }x)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd if match
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd filename = match[:filename].sub(/\.[\w\d]+\z/, '')
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd capitalized_name = filename.split(/[_ ]/).map(&:capitalize).join(' ')
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd else
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd name
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def iri_for_child(child_name)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd child_name = child_name[1..-2] if child_name[0] == '<'
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd child_name.include?("://") ? child_name : "#{iri}?#{child_name}"
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def locid_for_child(child_name)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd child_name = child_name[1..-2] if child_name[0] == '<'
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd child_name.include?('://') ? child_name : "#{locid}//#{child_name}"
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def is?(logic_name)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd self.logic ? (self.logic.name == logic_name) : false
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def owl?
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd self.is?('OWL') || self.is?('OWL2')
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def to_s
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd name? ? name : iri
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
cf02129aebf73dd0bdf369b172eb481ff76ac5f6colm
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd # Title for mappings
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def title
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd name? ? iri : nil
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def is_imported?
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd import_mappings.present?
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def is_imported_from_other_repository?
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd import_mappings_from_other_repositories.present?
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def imported_by
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd import_mappings.map(&:source)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def destroy_with_parent(user)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd if parent
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd repository.delete_file(parent.path, user,
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd "Delete #{Settings.OMS} #{parent}") do
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd parent.destroy
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd else
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd repository.delete_file(path, user,
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd "Delete #{Settings.OMS} #{self}") do
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd destroy
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def destroy
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd raise Ontology::DeleteError unless can_be_deleted?
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd super
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def can_be_deleted?
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd if repository.is_destroying
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd can_be_deleted_with_whole_repository?
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd else
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd can_be_deleted_alone?
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def can_be_deleted_alone?
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd !is_imported?
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def can_be_deleted_with_whole_repository?
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd !is_imported_from_other_repository?
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def imported_ontologies
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd fetch_mappings_by_kind(self, 'import')
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def contains_logic_translations?
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd query, args = contains_logic_translations_query(self)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd pluck_select([query, *args], :logically_translated).size > 1
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def direct_imported_ontologies
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd ontology_ids = Mapping.where(target_id: self, kind: 'import').
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd pluck(:source_id)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd Ontology.where(id: ontology_ids)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def combined_sentences
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd affected_ontology_ids = [self.id] + imported_ontologies.pluck(:id)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd Sentence.where(ontology_id: affected_ontology_ids)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd # list all sentences defined on this ontology,
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd # those who are self defined and those which
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd # are imported (ImpAxioms)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def all_sentences
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd Sentence.unscoped.
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd where(ontology_id: self).
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd where('imported = ? OR imported = ?', true, false)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def all_axioms
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd Axiom.unscoped.
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd where(ontology_id: self).
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd where('imported = ? OR imported = ?', true, false)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def imported_sentences
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd Sentence.unscoped.
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd where(ontology_id: self).
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd where('imported = ?', true)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def basepath
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd has_versions? ? current_version.basepath : read_attribute(:basepath)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def file_extension
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd has_versions? ? current_version.file_extension : read_attribute(:file_extension)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def path
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd "#{basepath}#{file_extension}"
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def has_versions?
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd current_version.present?
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def file_in_repository
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd repository.get_file(path)
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd # Uses where in order to force a Relation as a result
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def formality_levels
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd FormalityLevel.joins(:ontologies).
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd where(ontologies: {id: self})
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def versioned_locid
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd current_version.locid
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd protected
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def import_mappings
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd Mapping.where(source_id: id, kind: 'import')
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd def import_mappings_from_other_repositories
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd import_mappings.select { |l| l.target.repository != repository }
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd end
d78d735dbf7c5ce5ae545eecd8ee2c052224db77ndend
d78d735dbf7c5ce5ae545eecd8ee2c052224db77nd