ontology.rb revision 85740b8f9c770963a1fe3a993c1745fb4f4f5ea8
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen # Ontohub Library Includes
c2ee17c9c263efdc9c0a339c4836c3d43f5cd3d9Sascha Wilde # Ontology Model Includes
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen include GraphStructures::SpecificFetchers::Links
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen # Multiple Class Features
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen has_many :alternative_iris, dependent: :destroy
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen has_many :source_links, class_name: 'Link', foreign_key: 'source_id', dependent: :destroy
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen has_many :target_links, class_name: 'Link', foreign_key: 'target_id', dependent: :destroy
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen attr_accessible :iri, :name, :description, :acronym, :documentation,
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen validates_uniqueness_of :iri, :if => :iri_changed?
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen validates_format_of :iri, :with => URI::regexp(Settings.allowed_iri_schemes)
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen format: { with: URI::regexp(Settings.allowed_iri_schemes) }
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen scope :list, includes(:logic).order('ontologies.state asc, ontologies.entities_count desc')
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen where "ontologies.basepath = :basepath AND ontologies.file_extension = :file_extension",
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen scope :parents_first, order('(CASE WHEN ontologies.parent_id IS NULL THEN 1 ELSE 0 END) DESC, ontologies.parent_id asc')
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen :// # A uri has a separation between schema and hierarchy
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen (?<filename>[^/]+) # Match filename after a slash/hash
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen filename = match[:filename].sub(/\.[\w\d]+\z/, '')
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen capitalized_name = filename.split(/[_ ]/).map(&:capitalize).join(' ')
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen child_name = child_name[1..-2] if child_name[0] == '<'
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen child_name.include?("://") ? child_name : "#{iri}?#{child_name}"
c2ee17c9c263efdc9c0a339c4836c3d43f5cd3d9Sascha Wilde self.logic ? (self.logic.name == logic_name) : false
c2ee17c9c263efdc9c0a339c4836c3d43f5cd3d9Sascha Wilde ontology = AlternativeIri.find_by_iri(iri).try(:ontology)
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen repository.delete_file(parent.path, user, "Delete ontology #{parent}") do
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen repository.delete_file(path, user, "Delete ontology #{self}") do
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen query, args = contains_logic_translations_query(self)
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen pluck_select([query, *args], :logically_translated).size > 1
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen ontology_ids = Link.where(target_id: self, kind: 'import').
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen affected_ontology_ids = [self.id] + imported_ontologies.pluck(:id)
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen Sentence.where(ontology_id: affected_ontology_ids)
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen # list all sentences defined on this ontology,
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen where('imported = ? OR imported = ?', true, false)
4654f788834c9d7920a351306b89cf5d1c21772eTimo Sirainen where "ontologies.basepath = :basepath AND ontologies.file_extension = :file_extension AND ontologies.parent_id IS NULL",