Class: OMF::SFA::Model::ModelClassDescription

Inherits:
Base::LObject
  • Object
show all
Defined in:
lib/omf-sfa/model/model_class_description.rb

Constant Summary collapse

@@name2inst =
{}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(full_name) ⇒ ModelClassDescription

Returns a new instance of ModelClassDescription.



40
41
42
43
44
45
46
# File 'lib/omf-sfa/model/model_class_description.rb', line 40

def initialize(full_name)
  @uri = full_name
  @ns, @name = full_name.split('#')
  super @name
  @properties = {}
  @children = []
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



38
39
40
# File 'lib/omf-sfa/model/model_class_description.rb', line 38

def name
  @name
end

#nsObject (readonly)

Returns the value of attribute ns.



38
39
40
# File 'lib/omf-sfa/model/model_class_description.rb', line 38

def ns
  @ns
end

#uriObject (readonly)

Returns the value of attribute uri.



38
39
40
# File 'lib/omf-sfa/model/model_class_description.rb', line 38

def uri
  @uri
end

Class Method Details

.[](uri) ⇒ Object



13
14
15
# File 'lib/omf-sfa/model/model_class_description.rb', line 13

def self.[](uri)
  @@name2inst[uri]
end

.create_from_xml(cel) ⇒ Object



29
30
31
32
33
34
35
# File 'lib/omf-sfa/model/model_class_description.rb', line 29

def self.create_from_xml(cel)
  about = cel.attribute_with_ns('about', RDF_NS)
  name = xml_full_name(about.value, cel)
  klass = @@name2inst[name] ||= self.new(name)
  klass.parse(cel)
  klass
end

.each(&block) ⇒ Object



17
18
19
20
21
22
23
# File 'lib/omf-sfa/model/model_class_description.rb', line 17

def self.each(&block)
  if block
    @@name2inst.values.each &block
  else
    @@name2inst.values
  end
end

.modelsObject



25
26
27
# File 'lib/omf-sfa/model/model_class_description.rb', line 25

def self.models()
  @@name2inst.values
end

Instance Method Details

#add_child_class(class_model) ⇒ Object



109
110
111
# File 'lib/omf-sfa/model/model_class_description.rb', line 109

def add_child_class(class_model)
  @children << class_model
end

#add_property(prop_description) ⇒ Object



48
49
50
51
52
53
54
55
56
57
# File 'lib/omf-sfa/model/model_class_description.rb', line 48

def add_property(prop_description)
  name = prop_description.name
  if p = @properties[name]
    if p != prop_description
      error "Trying to add additional property with smae name '#{name}'"
    end
  else
    @properties[name] = prop_description
  end
end

#describe(level = 0, max_level = 99) ⇒ Object



113
114
115
116
117
118
119
120
121
122
123
# File 'lib/omf-sfa/model/model_class_description.rb', line 113

def describe(level = 0, max_level = 99)
  if !@properties.empty? || level == 0
    prefix = "  " * level
    puts "#{prefix}-------------------------"
    puts "#{prefix}Class: #{name}"
    describe_properties(prefix)
  end
  @children.each do |ch|
    ch.describe level + 1, max_level
  end
end

#describe_properties(prefix) ⇒ Object



125
126
127
128
129
130
131
132
133
# File 'lib/omf-sfa/model/model_class_description.rb', line 125

def describe_properties(prefix)
  # if superklass.kind_of? self.class
    # superklass.describe_properties
  # end
  @properties.each do |n, p|
    mark = p.kind_of?(ModelDataPropertyDescription) ? '=' : '>'
    puts "#{prefix}  #{mark} #{n}"
  end
end

#parse(cel) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/omf-sfa/model/model_class_description.rb', line 60

def parse(cel)
  cel.children.each do |el|
    node_name = el.node_name
    next if node_name == 'comment'
    
    case el.node_name
    when 'subClassOf'
      parse_super(el)
    when 'disjointWith'
      # <owl:disjointWith rdf:resource="#Item"/>
    when 'label'
      @label = el.content
    else
      warn "Unknown eleement '#{el.node_name}' in '#{self.class.name}'"
    end
  end
end

#parse_super(el) ⇒ Object

TODO: Parsing of ‘Restriction’

<rdfs:subClassOf rdf:resource="#NetworkElement"/>
<rdfs:subClassOf>
    <owl:Restriction>
        <owl:onProperty rdf:resource="#hasSwitchMatrix"/>
        <owl:someValuesFrom rdf:resource="#SwitchMatrix"/>
    </owl:Restriction>
</rdfs:subClassOf>


88
89
90
91
92
93
94
95
96
97
# File 'lib/omf-sfa/model/model_class_description.rb', line 88

def parse_super(el)
  res = el.attribute_with_ns('resource', RDF_NS)
  if res
    if @superklass
      warn "Don't really know how to handle multiple inheritence in '#{@name}'"
    end
    @superklass = xml_full_name(res.value, el)
  end
  
end

#superklassObject



99
100
101
102
103
104
105
106
107
# File 'lib/omf-sfa/model/model_class_description.rb', line 99

def superklass
  unless @superklass.kind_of? self.class
    if klass = self.class[@superklass]
      @superklass = klass
      klass.add_child_class(self)
    end
  end
  @superklass
end

#to_sObject



139
140
141
# File 'lib/omf-sfa/model/model_class_description.rb', line 139

def to_s
  "#{@name} (#{self.class.name}) - super: #{superklass || 'none'}"
end

#validateObject



135
136
137
# File 'lib/omf-sfa/model/model_class_description.rb', line 135

def validate()
  superklass
end