ontomde-core 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,173 +1,185 @@
1
- #:include: ../shared/license.rdoc
2
-
3
- module Mrdf_Model
4
- end
5
-
6
- class Crdf_Resource
7
- #True if resource is a bootstrap resource.
8
- #A bootstrap resource is a resource existing prior to model creation (not loaded from external configuration file).
9
- #Loaded resources are built using bootstrap resouces as references.
10
- rdf_safe_attr_reader_many :ext_isBootstrap
11
- end
12
-
13
- #Class meant to store every element of a model.
14
- class Crdf_Model #< Hash
15
- include Mrdf_Model
16
- attr_reader :updateCount
17
- def length
18
- @resourceSet.length
19
- end
20
- def empty?
21
- return @resourceSet.empty?
22
- end
23
- def to_s
24
- log.debug 'Model'
25
- end
26
-
27
- # Returns the ressource associated to the uri key.
28
- def [](key)
29
- return @resourceSet[key]
30
- end
31
-
32
- # Internal use
33
- def []=(key,res)
34
- @resourceSet[key]=res
35
- end
36
-
37
- # Standard each iterator
38
- def each(&block_expr)
39
- @resourceSet.each &block_expr
40
- end
41
-
42
- # Standard find_all iterator
43
- def find_all(&block_expr)
44
- @resourceSet.find_all &block_expr
45
- end
46
-
47
- # Standard each_value iterator
48
- def each_value(&block_expr)
49
- @resourceSet.each_value &block_expr
50
- end
51
- #
52
- # Standard reject iterator
53
- def reject(&block_expr)
54
- @resourceSet.reject &block_expr
55
- end
56
-
57
- # Initialize model internal structures.
58
- def initialize
59
- super
60
- @resourceSet=Hash.new
61
- #@fileGenerated=Array.new
62
- @updateCount=0
63
- #@@mtk_out=nil
64
-
65
- #bootstrap
66
- Crdf_Resource.new(self,'rdf_Resource');
67
- Crdf_Resource.new(self,'rdfs_Resource'); # le p�re des h�ritages
68
- Crdf_Resource.new(self,'rdfs_Class');
69
- Crdf_Resource.new(self,'rdf_Property');
70
- Crdf_Resource.new(self,'rdfs_Literal');
71
-
72
- #bootstrap pour module kb
73
- Crdf_Resource.new(self,'kb_UML_METACLASS');
74
- Crdf_Resource.new(self,'kb_UML_SLOT');
75
-
76
- self.each {|k,c| c.ext_isBootstrap='true'}
77
- end
78
-
79
- #returns ressource associated to uri stored in model
80
- def getRes(uri)
81
- raise Warning.new,'nil uri' if uri.nil?
82
- obj=self[uri]
83
- raise WarningURIundefined.new(uri),"--uri undefined \"#{uri}\" " if obj.nil?
84
- return obj
85
- end
86
-
87
- # internal use
88
- def parse(nt,modeData)
89
- if modeData
90
- parseModeData(nt)
91
- else
92
- parseModeResource(nt)
93
- end
94
- end
95
-
96
- # internal use
97
- @@RDF_type=['rdf_type']
98
-
99
- # internal use
100
- def predicat_isRDFTYPE(predicat)
101
- return @@RDF_type.include?(predicat)
102
- end
103
-
104
- # internal use
105
- def dynNewInstance(value_res,about_uri)
106
- cmd=value_res.getRubyClassName+'.new(self,about_uri)'
107
- return eval(cmd)
108
- end
109
-
110
- # internal use
111
- def parseModeResource(nt)
112
- return if !predicat_isRDFTYPE(nt.predicat_uri)
113
-
114
- about_res=self[nt.about_uri]
115
- if about_res
116
- about_res.forceReset!()
117
- else
118
- value_res=self.getRes(nt.value_uri)
119
- begin
120
- self[nt.about_uri]=about_res=dynNewInstance(value_res,nt.about_uri)
121
- about_res.rdf_type=value_res
122
- #about_res.set(rubyIdentifier(predicat_uri),value_res) # ref
123
- rescue => e
124
- log.debug "e-->#{e}"
125
- #TODO: cause probable
126
- raise WarningRubyTypeUndefined.new(nt.about_uri,value_res),"Ruby Type #{value_res.getRubyClassName} Undefined (cause probable!)"
127
- end
128
- return
129
- end
130
- end
131
-
132
- # internal use
133
- def parseModeData(nt)
134
- return if predicat_isRDFTYPE(nt.predicat_uri)
135
- subject=self.getRes(nt.about_uri)
136
- if nt.valueIsReference?
137
- subject.set(rubyIdentifier(nt.predicat_uri),self.getRes(nt.value_uri))
138
- else
139
- subject.set(rubyIdentifier(nt.predicat_uri),nt.value_litteral)
140
- end
141
-
142
- end
143
-
144
- # internal use
145
- def rubyIdentifier(str)
146
- return str.tr('^a-zA-Z0-9','_')
147
- end
148
-
149
- # internal use
150
- def generateClassesFromMetamodel(outRubyModelFileName)
151
- log.info("ecriture du metamodele dans: #{outRubyModelFileName}")
152
- #f=File.open(outRubyModelFileName,File::CREAT|File::TRUNC|File::RDWR, 0644)
153
- mtk_default_context(:logFileWrite => false) { mtk_writeSession(outRubyModelFileName) {
154
- f=self
155
- f.write("# Debut du fichier #{outRubyModelFileName}\n")
156
- f.write("# Ce fichier a ete genere automatiquement\n")
157
- f.write("# Genere le:#{Time.now}\n")
158
- self.
159
- find_all { |a,x|
160
- x.kind_of?(Crdfs_Class)
161
- }.
162
- each { |a,x|
163
- #log.debug "gen -> #{x} #{x.class}"
164
- cmd=x.createRubyClass(self)
165
- f.write(cmd)
166
- }
167
- f.write("# Fin du fichier #{outRubyModelFileName}\n")
168
- }} #f.close
169
-
170
- end
171
-
172
-
173
- end
1
+ module Mrdf_Model
2
+ end
3
+
4
+ class Crdf_Resource
5
+ #True if resource is a bootstrap resource.
6
+ #A bootstrap resource is a resource existing prior to model creation (not loaded from external configuration file).
7
+ #Loaded resources are built using bootstrap resouces as references.
8
+ rdf_safe_attr_reader_many :ext_isBootstrap
9
+ end
10
+
11
+ #Class meant to store every element of a model.
12
+ class Crdf_Model #< Hash
13
+ include Mrdf_Model
14
+ attr_reader :updateCount
15
+
16
+ attr :typeIndex
17
+
18
+
19
+ def addTypeIndex(idxType)
20
+ @typeIndex[idxType]=Set.new
21
+ end
22
+ def length
23
+ @resourceSet.length
24
+ end
25
+ def empty?
26
+ return @resourceSet.empty?
27
+ end
28
+ def to_s
29
+ log.debug 'Model'
30
+ end
31
+
32
+ # Returns the ressource associated to the uri key.
33
+ def [](key)
34
+ return @resourceSet[key]
35
+ end
36
+
37
+ # Internal use
38
+ def []=(key,res)
39
+ if @resourceSet.include?(key)
40
+ #puts "duplicate key: #{res == @resourceSet[key]} #{@@zzzz} #{key} --> #{res} #{@resourceSet[key]}"
41
+ #raise Exception.new() if res.to_s.include?("string") #if res != @resourceSet[key] #&& key.include?("get_p1")
42
+ end
43
+ @typeIndex.each { |ti,idx|
44
+ idx.add(res) if res.kind_of?(ti)
45
+ }
46
+ @resourceSet[key]=res
47
+ end
48
+
49
+ # Standard each iterator
50
+ def each(&block_expr)
51
+ @resourceSet.each &block_expr
52
+ end
53
+
54
+ # Standard find_all iterator
55
+ def find_all(&block_expr)
56
+ @resourceSet.find_all &block_expr
57
+ end
58
+
59
+ # Standard each_value iterator
60
+ def each_value(&block_expr)
61
+ @resourceSet.each_value &block_expr
62
+ end
63
+ #
64
+ # Standard reject iterator
65
+ def reject(&block_expr)
66
+ @resourceSet.reject &block_expr
67
+ end
68
+
69
+ # Initialize model internal structures.
70
+ def initialize
71
+ super
72
+ @resourceSet=Hash.new
73
+ #@fileGenerated=Array.new
74
+ @updateCount=0
75
+ @typeIndex=Hash.new
76
+ #@@mtk_out=nil
77
+
78
+ #bootstrap
79
+ Crdf_Resource.new(self,'rdf_Resource');
80
+ Crdf_Resource.new(self,'rdfs_Resource'); # le p�re des h�ritages
81
+ Crdf_Resource.new(self,'rdfs_Class');
82
+ Crdf_Resource.new(self,'rdf_Property');
83
+ Crdf_Resource.new(self,'rdfs_Literal');
84
+
85
+ #bootstrap pour module kb
86
+ Crdf_Resource.new(self,'kb_UML_METACLASS');
87
+ Crdf_Resource.new(self,'kb_UML_SLOT');
88
+
89
+ self.each {|k,c| c.ext_isBootstrap='true'}
90
+ end
91
+
92
+ #returns ressource associated to uri stored in model
93
+ def getRes(uri)
94
+ raise Warning.new,'nil uri' if uri.nil?
95
+ obj=self[uri]
96
+ raise WarningURIundefined.new(uri),"--uri undefined \"#{uri}\" " if obj.nil?
97
+ return obj
98
+ end
99
+
100
+ # internal use
101
+ def parse(nt,modeData)
102
+ if modeData
103
+ parseModeData(nt)
104
+ else
105
+ parseModeResource(nt)
106
+ end
107
+ end
108
+
109
+ # internal use
110
+ @@RDF_type=['rdf_type']
111
+
112
+ # internal use
113
+ def predicat_isRDFTYPE(predicat)
114
+ return @@RDF_type.include?(predicat)
115
+ end
116
+
117
+ # internal use
118
+ def dynNewInstance(value_res,about_uri)
119
+ cmd=value_res.getRubyClassName+'.new(self,about_uri)'
120
+ return eval(cmd)
121
+ end
122
+
123
+ # internal use
124
+ def parseModeResource(nt)
125
+ return if !predicat_isRDFTYPE(nt.predicat_uri)
126
+
127
+ about_res=self[nt.about_uri]
128
+ if about_res
129
+ about_res.forceReset!()
130
+ else
131
+ value_res=self.getRes(nt.value_uri)
132
+ begin
133
+ about_res=dynNewInstance(value_res,nt.about_uri)
134
+ about_res.rdf_type=value_res
135
+ #about_res.set(rubyIdentifier(predicat_uri),value_res) # ref
136
+ rescue => e
137
+ log.debug "e-->#{e}"
138
+ #TODO: cause probable
139
+ raise WarningRubyTypeUndefined.new(nt.about_uri,value_res),"Ruby Type #{value_res.getRubyClassName} Undefined (cause probable!)"
140
+ end
141
+ return
142
+ end
143
+ end
144
+
145
+ # internal use
146
+ def parseModeData(nt)
147
+ return if predicat_isRDFTYPE(nt.predicat_uri)
148
+ subject=self.getRes(nt.about_uri)
149
+ if nt.valueIsReference?
150
+ subject.set(rubyIdentifier(nt.predicat_uri),self.getRes(nt.value_uri))
151
+ else
152
+ subject.set(rubyIdentifier(nt.predicat_uri),nt.value_litteral)
153
+ end
154
+
155
+ end
156
+
157
+ # internal use
158
+ def rubyIdentifier(str)
159
+ return str.tr('^a-zA-Z0-9','_')
160
+ end
161
+
162
+ # internal use
163
+
164
+ def generateClassesFromMetamodel(outRubyModelFileName)
165
+ #log.debug("ecriture du metamodele dans: #{outRubyModelFileName}")
166
+ mtk_default_context(:logFileWrite => false) { mtk_writeSession(outRubyModelFileName) {
167
+ f=self
168
+ f.write <<END
169
+ # Start of file #{outRubyModelFileName}
170
+ # This file is automaticaly generated
171
+ # Generation date:#{Time.now}
172
+ END
173
+ self.each_value { |x|
174
+ next unless x.kind_of?(Crdfs_Class)
175
+ ##log.debug "gen -> #{x} #{x.class}"
176
+ #createRubyClassMinimal(model)
177
+ cmd=x.createRubyClass(self)
178
+ f.write(cmd)
179
+ }
180
+ f.write("# End of file #{outRubyModelFileName}\n")
181
+ }}
182
+ end
183
+
184
+
185
+ end