5a102b3c56d4ac75632c7e9244ee0ce5bdbbf13aSascha Graefclass Ontology < LocIdBaseModel
777277547289aa27dd829f34bfa8ae6900cadbe7Eugen Kuksa # Ontohub Library Includes
432ee743a5f1c5688c73446b5977b06ed97fb67cJulian Kornberger include Commentable
d0e19b833d7f9c691a36342c365029720c095742henning mueller include Metadatable
d0e19b833d7f9c691a36342c365029720c095742henning mueller
d8fe750649d3c87ea141981dde0182e879e27892Daniel Couto Vale # Ontology Model Includes
cddb417c56f9919bcfac77232d6b54ddc003d54cEugen Kuksa include GraphStructures::SpecificFetchers::Mappings
cddb417c56f9919bcfac77232d6b54ddc003d54cEugen Kuksa include IRIUrlBuilder::Includeable
4e7975a0b641622d0e51ac45e727bc0a8cfdb0a2Eugen Kuksa include Ontology::AssociationsAndAttributes
c39fda5715a22fd5aca1f8aa0daa508c25a229c2Sascha Graef include Ontology::Categories
c882cce4bd468bb3ac48c4d816307dcccad380b3Eugen Kuksa include Ontology::ClassMethodsAndScopes
cddb417c56f9919bcfac77232d6b54ddc003d54cEugen Kuksa include Ontology::Distributed
8909576a7720b882ab11c3916bd02154f2fa65fchenning mueller include Ontology::FileExtensions
37d0428752228b885ae94e6b0aea5452787fb102Eugen Kuksa include Ontology::HetsOptions
cddb417c56f9919bcfac77232d6b54ddc003d54cEugen Kuksa include Ontology::Import
0c0319d417578bc9cfa723708ee451db7fb2d6d5Eugen Kuksa include Ontology::ImportMappings
cddb417c56f9919bcfac77232d6b54ddc003d54cEugen Kuksa include Ontology::Mappings
cddb417c56f9919bcfac77232d6b54ddc003d54cEugen Kuksa include Ontology::Oops
dca00e3e210f3a3f814c63511f426128b1f3308cEugen Kuksa include Ontology::OwlClasses
cddb417c56f9919bcfac77232d6b54ddc003d54cEugen Kuksa include Ontology::Searching
cddb417c56f9919bcfac77232d6b54ddc003d54cEugen Kuksa include Ontology::Sentences
cddb417c56f9919bcfac77232d6b54ddc003d54cEugen Kuksa include Ontology::States
cddb417c56f9919bcfac77232d6b54ddc003d54cEugen Kuksa include Ontology::Symbols
cddb417c56f9919bcfac77232d6b54ddc003d54cEugen Kuksa include Ontology::Validations
cddb417c56f9919bcfac77232d6b54ddc003d54cEugen Kuksa include Ontology::Versions
ab2be9b1453256821fb11be230149c49963a7b69Eugen Kuksa include ::AccessScopesForRepositoryAssociations
cad2121a9e9a87317333b202956ce7478efcc257henning mueller
20c94fa632f5b9a5a1b2fbc28fa46f2afe7c65c2Tim Reddehase # Multiple Class Features
20c94fa632f5b9a5a1b2fbc28fa46f2afe7c65c2Tim Reddehase include Aggregatable
20c94fa632f5b9a5a1b2fbc28fa46f2afe7c65c2Tim Reddehase
62b1e45efde570fb171801dbe2716d24a4b70ad8Eugen Kuksa class Ontology::DeleteError < StandardError; end
4bc5ce05ccad8d66930671690afb2b1cee179c1bEugen Kuksa
772a71bcc07f7001f5cd3cb4c3dc2cf393ffe9beJulian Kornberger delegate :permission?, to: :repository
772a71bcc07f7001f5cd3cb4c3dc2cf393ffe9beJulian Kornberger
120a4f90c07b4fdcdb5a856982a64a604ea98094Tim Reddehase strip_attributes :only => [:name]
120a4f90c07b4fdcdb5a856982a64a604ea98094Tim Reddehase
120a4f90c07b4fdcdb5a856982a64a604ea98094Tim Reddehase def iri
120a4f90c07b4fdcdb5a856982a64a604ea98094Tim Reddehase "#{Hostname.url_authority}#{locid}"
120a4f90c07b4fdcdb5a856982a64a604ea98094Tim Reddehase end
0a467126135b44190e96e6dc57df4dc9e8312725Timo Kohorst
8d3aa811c26916ecb2051e97a249f25fb6feeaf4Eugen Kuksa def repository
ce4376cf83941a8eed6a14acc1d446eec52b2e83Eugen Kuksa @repository ||= Repository.find(repository_id)
8d3aa811c26916ecb2051e97a249f25fb6feeaf4Eugen Kuksa end
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller def generate_name(name)
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller match = name.match(%r{
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller \A
19e8cd68931e22d37e1e17fb8d93c84c802a4f76Tim Reddehase .+?
19e8cd68931e22d37e1e17fb8d93c84c802a4f76Tim Reddehase :// # A uri has a separation between schema and hierarchy
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller .+
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller (?:/|\#)
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller (?<filename>[^/]+) # Match filename after a slash/hash
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller \z
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller }x)
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller if match
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller filename = match[:filename].sub(/\.[\w\d]+\z/, '')
4ae600b01cda15be2d0ef49dc3fc4ad9006911d7Tim Reddehase capitalized_name = filename.split(/[_ ]/).map(&:capitalize).join(' ')
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller else
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller name
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller end
a4707bb77f9894e31b9e5b924c34e0095681cfe3Eugen Kuksa end
a4707bb77f9894e31b9e5b924c34e0095681cfe3Eugen Kuksa
5a102b3c56d4ac75632c7e9244ee0ce5bdbbf13aSascha Graef def generate_locid_string
5a102b3c56d4ac75632c7e9244ee0ce5bdbbf13aSascha Graef if externally_generated_locid
5a102b3c56d4ac75632c7e9244ee0ce5bdbbf13aSascha Graef externally_generated_locid
5a102b3c56d4ac75632c7e9244ee0ce5bdbbf13aSascha Graef elsif parent.nil?
5a102b3c56d4ac75632c7e9244ee0ce5bdbbf13aSascha Graef # Distributed or parentless ontology
5a102b3c56d4ac75632c7e9244ee0ce5bdbbf13aSascha Graef "/#{repository.path}/#{basepath}"
5a102b3c56d4ac75632c7e9244ee0ce5bdbbf13aSascha Graef else
5a102b3c56d4ac75632c7e9244ee0ce5bdbbf13aSascha Graef # Child ontology
5a102b3c56d4ac75632c7e9244ee0ce5bdbbf13aSascha Graef parent.locid_for_child(name)
5a102b3c56d4ac75632c7e9244ee0ce5bdbbf13aSascha Graef end
5a102b3c56d4ac75632c7e9244ee0ce5bdbbf13aSascha Graef end
5a102b3c56d4ac75632c7e9244ee0ce5bdbbf13aSascha Graef
b997f0e2638f7b5e47f934e2f37c36767f7177d0Tim Reddehase def locid_for_child(child_name)
b997f0e2638f7b5e47f934e2f37c36767f7177d0Tim Reddehase child_name = child_name[1..-2] if child_name[0] == '<'
aa6a6b29584351c27210c27d29151fccbba61212Tim Reddehase child_name.include?('://') ? child_name : "#{locid}//#{child_name}"
b997f0e2638f7b5e47f934e2f37c36767f7177d0Tim Reddehase end
b997f0e2638f7b5e47f934e2f37c36767f7177d0Tim Reddehase
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller def is?(logic_name)
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller self.logic ? (self.logic.name == logic_name) : false
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller end
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller def owl?
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller self.is?('OWL') || self.is?('OWL2')
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller end
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller def to_s
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller name? ? name : iri
777277547289aa27dd829f34bfa8ae6900cadbe7Eugen Kuksa end
46dd7ca898be6d5dbdfda64fd90ce01e253c0878Julian Kornberger
67ea9fccbdc154cf2418f16ab8883ccfcbc77b51Model Renamer # Title for mappings
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller def title
f3b8c4da2db512a2ad58709c1c6bb0d93d1866bbhenning mueller name? ? iri : nil
61fdfd6e7ee93fca56a15fee37d9982528d85a60Sascha Graef end
61fdfd6e7ee93fca56a15fee37d9982528d85a60Sascha Graef
296f03208bf82551e7ab646c8b874d618d9c44a4Eugen Kuksa def destroy_with_parent(user)
8ca8c974c5b60b881e5e509c33a7c2ab56eb4acfEugen Kuksa if parent
ca86423fdf0e95c5ef6eb00c155991f8e3964533hardik repository.delete_file(parent.path, user,
a686bfa88234792b2dd2515da6a60aa110380916hardik "Delete #{Settings.OMS} #{parent}") do
296f03208bf82551e7ab646c8b874d618d9c44a4Eugen Kuksa parent.destroy
296f03208bf82551e7ab646c8b874d618d9c44a4Eugen Kuksa end
8ca8c974c5b60b881e5e509c33a7c2ab56eb4acfEugen Kuksa else
ca86423fdf0e95c5ef6eb00c155991f8e3964533hardik repository.delete_file(path, user,
a686bfa88234792b2dd2515da6a60aa110380916hardik "Delete #{Settings.OMS} #{self}") do
296f03208bf82551e7ab646c8b874d618d9c44a4Eugen Kuksa destroy
296f03208bf82551e7ab646c8b874d618d9c44a4Eugen Kuksa end
8ca8c974c5b60b881e5e509c33a7c2ab56eb4acfEugen Kuksa end
8ca8c974c5b60b881e5e509c33a7c2ab56eb4acfEugen Kuksa end
8ca8c974c5b60b881e5e509c33a7c2ab56eb4acfEugen Kuksa
8ca8c974c5b60b881e5e509c33a7c2ab56eb4acfEugen Kuksa def destroy
d48ad500ac13e587c1d0d9b278ac9d86cde873efEugen Kuksa raise Ontology::DeleteError unless can_be_deleted?
8ca8c974c5b60b881e5e509c33a7c2ab56eb4acfEugen Kuksa super
8ca8c974c5b60b881e5e509c33a7c2ab56eb4acfEugen Kuksa end
8ca8c974c5b60b881e5e509c33a7c2ab56eb4acfEugen Kuksa
d48ad500ac13e587c1d0d9b278ac9d86cde873efEugen Kuksa def can_be_deleted?
28042dd9ac50a328466a3dd0464b6e26a7c8796dEugen Kuksa if repository.is_destroying
ac0d5f8866a6b0fd2c5b8b9f7a73090ce818d2feEugen Kuksa can_be_deleted_with_whole_repository?
ac0d5f8866a6b0fd2c5b8b9f7a73090ce818d2feEugen Kuksa else
ac0d5f8866a6b0fd2c5b8b9f7a73090ce818d2feEugen Kuksa can_be_deleted_alone?
ac0d5f8866a6b0fd2c5b8b9f7a73090ce818d2feEugen Kuksa end
ac0d5f8866a6b0fd2c5b8b9f7a73090ce818d2feEugen Kuksa end
ac0d5f8866a6b0fd2c5b8b9f7a73090ce818d2feEugen Kuksa
ac0d5f8866a6b0fd2c5b8b9f7a73090ce818d2feEugen Kuksa def can_be_deleted_alone?
a175267206c317be4f57d42e6f1ffb6e9e6ddbdbEugen Kuksa !source_mappings_from_other_files.any? &&
513dddcb34d6e2551fc4cfe5d9fd02afa5b8ce92Eugen Kuksa children.all?(&:can_be_deleted_alone?)
ac0d5f8866a6b0fd2c5b8b9f7a73090ce818d2feEugen Kuksa end
ac0d5f8866a6b0fd2c5b8b9f7a73090ce818d2feEugen Kuksa
ac0d5f8866a6b0fd2c5b8b9f7a73090ce818d2feEugen Kuksa def can_be_deleted_with_whole_repository?
a175267206c317be4f57d42e6f1ffb6e9e6ddbdbEugen Kuksa !source_mappings_from_other_repositories.any?
d48ad500ac13e587c1d0d9b278ac9d86cde873efEugen Kuksa end
d48ad500ac13e587c1d0d9b278ac9d86cde873efEugen Kuksa
fbe72315a0dc517cba60b5ec6f156d64139c1f3fTim Reddehase def contains_logic_translations?
fbe72315a0dc517cba60b5ec6f156d64139c1f3fTim Reddehase query, args = contains_logic_translations_query(self)
fbe72315a0dc517cba60b5ec6f156d64139c1f3fTim Reddehase pluck_select([query, *args], :logically_translated).size > 1
fbe72315a0dc517cba60b5ec6f156d64139c1f3fTim Reddehase end
fbe72315a0dc517cba60b5ec6f156d64139c1f3fTim Reddehase
12499f46bb83dba7d8c5ef4ab9d9e5a592f99f12Tim Reddehase def combined_sentences
12499f46bb83dba7d8c5ef4ab9d9e5a592f99f12Tim Reddehase affected_ontology_ids = [self.id] + imported_ontologies.pluck(:id)
8e43531a56a623f10fbc42d6b71994628c6dbc76Eugen Kuksa Sentence.original.where(ontology_id: affected_ontology_ids)
12499f46bb83dba7d8c5ef4ab9d9e5a592f99f12Tim Reddehase end
12499f46bb83dba7d8c5ef4ab9d9e5a592f99f12Tim Reddehase
9b9d0de2b383747e766f7734b9de2521c6663e43Tim Reddehase # list all sentences defined on this ontology,
9b9d0de2b383747e766f7734b9de2521c6663e43Tim Reddehase # those who are self defined and those which
9b9d0de2b383747e766f7734b9de2521c6663e43Tim Reddehase # are imported (ImpAxioms)
9b9d0de2b383747e766f7734b9de2521c6663e43Tim Reddehase def all_sentences
8e43531a56a623f10fbc42d6b71994628c6dbc76Eugen Kuksa Sentence.where(ontology_id: self)
a45d3d730a4a0428b96460e0484513fc4219662bEugen Kuksa end
a45d3d730a4a0428b96460e0484513fc4219662bEugen Kuksa
a45d3d730a4a0428b96460e0484513fc4219662bEugen Kuksa def all_axioms
8e43531a56a623f10fbc42d6b71994628c6dbc76Eugen Kuksa Axiom.where(ontology_id: self)
9b9d0de2b383747e766f7734b9de2521c6663e43Tim Reddehase end
9b9d0de2b383747e766f7734b9de2521c6663e43Tim Reddehase
85740b8f9c770963a1fe3a993c1745fb4f4f5ea8Tim Reddehase def imported_sentences
8e43531a56a623f10fbc42d6b71994628c6dbc76Eugen Kuksa Sentence.
85740b8f9c770963a1fe3a993c1745fb4f4f5ea8Tim Reddehase where(ontology_id: self).
85740b8f9c770963a1fe3a993c1745fb4f4f5ea8Tim Reddehase where('imported = ?', true)
85740b8f9c770963a1fe3a993c1745fb4f4f5ea8Tim Reddehase end
85740b8f9c770963a1fe3a993c1745fb4f4f5ea8Tim Reddehase
9c3693f982b609b38e50b4246692b43b3d0a57a9Eugen Kuksa def basepath
d19a4dc53e3507b5fba1308c531c9e81c4f67c4dEugen Kuksa has_versions? ? current_version.basepath : read_attribute(:basepath)
9c3693f982b609b38e50b4246692b43b3d0a57a9Eugen Kuksa end
9c3693f982b609b38e50b4246692b43b3d0a57a9Eugen Kuksa
9c3693f982b609b38e50b4246692b43b3d0a57a9Eugen Kuksa def file_extension
d19a4dc53e3507b5fba1308c531c9e81c4f67c4dEugen Kuksa has_versions? ? current_version.file_extension : read_attribute(:file_extension)
9c3693f982b609b38e50b4246692b43b3d0a57a9Eugen Kuksa end
9c3693f982b609b38e50b4246692b43b3d0a57a9Eugen Kuksa
9c3693f982b609b38e50b4246692b43b3d0a57a9Eugen Kuksa def path
d65fca2b4d44b4ee7a2edd5ad21af09f9efb22e9Eugen Kuksa "#{basepath}#{file_extension}"
9c3693f982b609b38e50b4246692b43b3d0a57a9Eugen Kuksa end
9c3693f982b609b38e50b4246692b43b3d0a57a9Eugen Kuksa
9c3693f982b609b38e50b4246692b43b3d0a57a9Eugen Kuksa def has_versions?
d19a4dc53e3507b5fba1308c531c9e81c4f67c4dEugen Kuksa current_version.present?
9c3693f982b609b38e50b4246692b43b3d0a57a9Eugen Kuksa end
9c3693f982b609b38e50b4246692b43b3d0a57a9Eugen Kuksa
2ae84818de6541409f6c8f2b417b868325aed315Tim Reddehase def file_in_repository
511ba3e3d7deb4a13a03ce522a99a0395acc61b7Tim Reddehase repository.get_file(path)
2ae84818de6541409f6c8f2b417b868325aed315Tim Reddehase end
2ae84818de6541409f6c8f2b417b868325aed315Tim Reddehase
81c8514bfc92d498e06a944ad19efc2c096b58b0Tim Reddehase # Uses where in order to force a Relation as a result
81c8514bfc92d498e06a944ad19efc2c096b58b0Tim Reddehase def formality_levels
81c8514bfc92d498e06a944ad19efc2c096b58b0Tim Reddehase FormalityLevel.joins(:ontologies).
81c8514bfc92d498e06a944ad19efc2c096b58b0Tim Reddehase where(ontologies: {id: self})
81c8514bfc92d498e06a944ad19efc2c096b58b0Tim Reddehase end
81c8514bfc92d498e06a944ad19efc2c096b58b0Tim Reddehase
33d42e7c36aef2d703ed3e35536dca4cd4290470Tim Reddehase def versioned_locid
33d42e7c36aef2d703ed3e35536dca4cd4290470Tim Reddehase current_version.locid
33d42e7c36aef2d703ed3e35536dca4cd4290470Tim Reddehase end
33d42e7c36aef2d703ed3e35536dca4cd4290470Tim Reddehase
47cff67f4631a114a82f54b5f1c7da27a600bf87Eugen Kuksa # Checks if a file at the given commit (HEAD if nil) doesn't exist.
b299dbef5e70f4f78937112b19370a4d5d0e04e3Eugen Kuksa def file_deleted?(commit_oid = nil)
b299dbef5e70f4f78937112b19370a4d5d0e04e3Eugen Kuksa !has_file?(commit_oid)
b299dbef5e70f4f78937112b19370a4d5d0e04e3Eugen Kuksa end
b299dbef5e70f4f78937112b19370a4d5d0e04e3Eugen Kuksa
b299dbef5e70f4f78937112b19370a4d5d0e04e3Eugen Kuksa # alias_method doesn't work for this one.
b299dbef5e70f4f78937112b19370a4d5d0e04e3Eugen Kuksa def has_file?(commit_oid = nil)
b299dbef5e70f4f78937112b19370a4d5d0e04e3Eugen Kuksa has_file(commit_oid)
b299dbef5e70f4f78937112b19370a4d5d0e04e3Eugen Kuksa end
b299dbef5e70f4f78937112b19370a4d5d0e04e3Eugen Kuksa
b88a97791a634e76770d150262f6b73ceacb5d91Eugen Kuksa def has_file(commit_oid = nil)
b299dbef5e70f4f78937112b19370a4d5d0e04e3Eugen Kuksa if repository.is_head?(commit_oid)
075e8216f719a593d9111ce303e5028bcb0400faEugen Kuksa self[:has_file]
b299dbef5e70f4f78937112b19370a4d5d0e04e3Eugen Kuksa else
b299dbef5e70f4f78937112b19370a4d5d0e04e3Eugen Kuksa repository.path_exists?(path, commit_oid)
b88a97791a634e76770d150262f6b73ceacb5d91Eugen Kuksa end
b88a97791a634e76770d150262f6b73ceacb5d91Eugen Kuksa end
0075dcb5aeeee4864fe9f64db82c8a8202bbe6d6henning muellerend