ontomde-uml2 1.0.6 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/Manifest.txt +38 -22
  2. data/README.txt +21 -2
  3. data/Rakefile +1 -1
  4. data/bin/ontomde-umlToProtege +4 -0
  5. data/lib/ontomde-uml2.rb +19 -17
  6. data/lib/ontomde-uml2/UMLdatatypeMapping.rb +441 -0
  7. data/lib/ontomde-uml2/autoImplement.rb +170 -166
  8. data/lib/ontomde-uml2/check.rb +1 -1
  9. data/lib/ontomde-uml2/component.rb +45 -0
  10. data/lib/ontomde-uml2/createAndAdd.rb +32 -20
  11. data/lib/ontomde-uml2/dotDiagram.rb +1 -1
  12. data/lib/ontomde-uml2/kb.rb +4 -0
  13. data/lib/ontomde-uml2/kb/MYMODEL_kb.pprj +2377 -0
  14. data/lib/ontomde-uml2/kb/MYMODEL_kb.rdf +2 -0
  15. data/lib/ontomde-uml2/kb/MYMODEL_kb.rdfs +441 -0
  16. data/lib/ontomde-uml2/kb/MYMODEL_meta.pprj +874 -0
  17. data/lib/ontomde-uml2/kb/command.rb +143 -0
  18. data/lib/ontomde-uml2/kb/datatypeMapping.rb +99 -0
  19. data/lib/ontomde-uml2/kb/protege.rb +687 -0
  20. data/lib/ontomde-uml2/multipleInheritance.rb +1 -1
  21. data/lib/ontomde-uml2/salvageErrors.rb +1 -1
  22. data/lib/ontomde-uml2/select.rb +83 -5
  23. data/lib/ontomde-uml2/shortcut.rb +23 -8
  24. data/lib/ontomde-uml2/uml2.pprj +943 -0
  25. data/lib/ontomde-uml2/uml2.rb +62 -29
  26. data/lib/ontomde-uml2/uml2.rdf +768 -0
  27. data/lib/ontomde-uml2/uml2.rdfs +3233 -0
  28. data/lib/ontomde-uml2/umlx.rb +31 -9
  29. data/lib/ontomde-uml2/version.rb +1 -1
  30. data/lib/ontomde-uml2/versionSignature.rb +1 -1
  31. data/lib/ontomde-uml2/xsd.pprj +1063 -0
  32. data/lib/ontomde-uml2/xsd.rdf +2 -0
  33. data/lib/ontomde-uml2/xsd.rdfs +17 -0
  34. data/test/_test_dot.rb +1 -1
  35. data/test/_test_perf.rb +1 -1
  36. data/test/test_base.rb +1 -1
  37. data/test/test_clone.rb +5 -5
  38. data/test/test_misc.rb +3 -3
  39. metadata +47 -29
@@ -0,0 +1,143 @@
1
+ #Command line front end for ontomde knowledge base generator.
2
+
3
+ require 'optparse'
4
+
5
+ require 'ontomde-uml2/kb'
6
+
7
+ #Rubygems allow a specific script version to be passed on command line.
8
+ #Version is passed as a first parameter like : _1.0.1_
9
+ #
10
+ #For testing purposes, this script may be called directly (not through gem).
11
+ #We have to remove the version number which was not removed by gem.
12
+ def removeVersionInARGV
13
+ return if ARGV.empty?
14
+ return unless ARGV[0]=~/^_[.0-9]*_$/
15
+ puts "** WARNING: command line parameter #{ARGV[0]} ignored.\n"
16
+ ARGV.delete_at(0)
17
+ end
18
+
19
+ removeVersionInARGV
20
+
21
+ options = {}
22
+ options[:target]="./build/"
23
+ options[:load]={}
24
+ options[:selfTestAndExit]=false
25
+
26
+ #cf: http://www.ruby-doc.org/core/classes/OptionParser.html
27
+ OptionParser.new do |opts|
28
+ opts.banner =<<ENDHELP
29
+ ------------------------------------------------------
30
+ #{File.basename(__FILE__)} converts a UML2/RDF model file into a protege 2000 knowledge base.
31
+ (cf: http://protege.stanford.edu)
32
+
33
+ Example:
34
+ $ #{File.basename(__FILE__)} --nt myUmlModel.emx.nt
35
+ will generate these Protege files:
36
+ * myUmlModel.emx.nt_kb.pprj
37
+ * myUmlModel.emx.nt_kb.rdf
38
+ * myUmlModel.emx.nt_kb.rdfs
39
+ ------------------------------------------------------
40
+ Usage: #{File.basename(__FILE__)} [options]
41
+ ENDHELP
42
+
43
+ opts.on("-v", "--[no|-verbose", "Run in verbose mode") do |v|
44
+ options[:verbose] = v
45
+ end
46
+
47
+ opts.on("-n","--nt FILE1.nt,FILE2.nt, ...",Array,"source UML2 model","(exported from a UML case tool)") do |v|
48
+ options[:nt] = v
49
+ end
50
+
51
+ opts.on("-l","--load FILE1.rb,File2.rb,..",Array,"option ruby file to load","used for generator customisation such as new datatype declaration") do |v|
52
+ options[:load]=v
53
+ end
54
+
55
+ opts.on("-t","--target DIRECTORY","Destination directory for generated files","default: --target #{options[:target]}") do |v|
56
+ options[:target] = v
57
+ end
58
+
59
+ opts.on("--[no-]selfTestAndExit", "self test and exit.","(loads every dependencies)","(Note: option used by binary generator)",%{default: --#{options[:selfTestAndExit]?"":"no-"}selfTestAndExit}) do |v|
60
+ options[:selfTestAndExit] = v
61
+ end
62
+
63
+ opts.separator ""
64
+ opts.separator "Common options:"
65
+
66
+ # No argument, shows at tail. This will print an options summary.
67
+ # Try it and see!
68
+ opts.on_tail("-h", "--help", "Show this message") do
69
+ puts opts
70
+ exit
71
+ end
72
+
73
+ end.parse!
74
+
75
+ if ARGV.length > 0
76
+ raise Exception.new("Command line processing at #{ARGV}")
77
+ end
78
+
79
+ if options[:selfTestAndExit ]
80
+ # load every depencies
81
+ # (used for rubyscript2exe to force loading of depencies)
82
+ # no dynamic load to perform
83
+ exit 0
84
+ end
85
+
86
+ options[:load].each { |f|
87
+ puts "INFO : Loading custom transformation from #{f} in #{FileUtils.pwd}" if options[:verbose]
88
+ begin
89
+ # if require is used add "./" to avoid
90
+ # file not found from binary generated with rubyscript2exe
91
+ require "./#{f}"
92
+ rescue Exception => e
93
+ log.error %{
94
+ *************** ERROR ***************
95
+ ** Error processing
96
+ ** --load #{f}
97
+ ** (pwd=#{FileUtils.pwd})
98
+ ** Exception:
99
+ ** #{e}
100
+ *************** ERROR ***************
101
+
102
+ }
103
+ raise e
104
+
105
+ end
106
+ }
107
+
108
+ [:nt,:target].each { |p|
109
+ puts "--#{p}=#{options[p]}" if options[:verbose]
110
+ next unless options[p].nil?
111
+ m="--#{p} parameter is mandatory"
112
+ log.error("")
113
+ log.error(m)
114
+ log.error("For command syntax :")
115
+ log.error("#{File.basename(__FILE__)} --help")
116
+ log.error("")
117
+ raise Exception.new(m)
118
+ }
119
+
120
+
121
+
122
+ def say(x)
123
+ puts("# #{File.basename(__FILE__)} #{x}")
124
+ end
125
+
126
+ model=Crdf_Repository.new
127
+ model.loadUml2
128
+ say "Chargement du modele"
129
+ i=0
130
+ modelName=""
131
+ options[:nt].each { |f|
132
+ i=i+1
133
+ modelName=f # Last one
134
+ say "Chargement de #{f}" if options[:verbose]
135
+ model.loadModelFromFile(f)
136
+ }
137
+ say "Nombre de fichiers charges: #{i}" if options[:verbose]
138
+ say "Generation du code" if options[:verbose]
139
+ model.mtk_context(:build=>options[:target],:logFileWrite=>false) {
140
+ model.generateRDFS(modelName)
141
+ }
142
+ say "done"
143
+
@@ -0,0 +1,99 @@
1
+ class DatatypeMapping
2
+ def prot_getProtegeType
3
+ return nil # no protege mapping defined
4
+ end
5
+ end
6
+
7
+ class DatatypeMappingText < DatatypeMapping
8
+ def prot_getProtegeType
9
+ return Muml_PrimitiveType::PROTEGE_STRING_DATATYPE
10
+ end
11
+ end
12
+
13
+ class DatatypeMappingLargeText < DatatypeMappingText
14
+ end
15
+
16
+ class DatatypeMappingMimeType < DatatypeMappingText
17
+ end
18
+
19
+ class DatatypeMappingOrdinal < DatatypeMappingText
20
+ end
21
+
22
+ class DatatypeMappingInteger < DatatypeMappingOrdinal
23
+ def prot_getProtegeType
24
+ return Muml_PrimitiveType::PROTEGE_INTEGER_DATATYPE
25
+ end
26
+ end
27
+
28
+ class DatatypeMappingLong < DatatypeMappingOrdinal
29
+ def prot_getProtegeType
30
+ return Muml_PrimitiveType::PROTEGE_INTEGER_DATATYPE
31
+ end
32
+ end
33
+
34
+ class DatatypeMappingLongObject < DatatypeMappingOrdinal
35
+ def prot_getProtegeType
36
+ return Muml_PrimitiveType::PROTEGE_INTEGER_DATATYPE
37
+ end
38
+ end
39
+ class DatatypeMappingFile < DatatypeMapping
40
+ end
41
+
42
+ class DatatypeMappingBoolean < DatatypeMapping
43
+ def prot_getProtegeType
44
+ return Muml_PrimitiveType::PROTEGE_BOOLEAN_DATATYPE
45
+ end
46
+ end
47
+
48
+ class DatatypeMappingTimeStamp < DatatypeMapping
49
+ def prot_getProtegeType
50
+ return Muml_PrimitiveType::PROTEGE_STRING_DATATYPE
51
+ end
52
+ end
53
+
54
+ class DatatypeMappingCalendar < DatatypeMapping
55
+ def prot_getProtegeType
56
+ return Muml_PrimitiveType::PROTEGE_STRING_DATATYPE
57
+ end
58
+ end
59
+
60
+
61
+
62
+
63
+ class DatatypeMappingGenericClass < DatatypeMapping
64
+ #def prot_getProtegeType
65
+ # not applicatble
66
+ #end
67
+ end
68
+
69
+ class DatatypeMappingGenericEnum < DatatypeMapping
70
+ #def prot_getProtegeType
71
+ # not applicatble
72
+ #end
73
+ end
74
+
75
+ class DatatypeMappingURL < DatatypeMappingText
76
+ end
77
+
78
+ class DatatypeMappingBLOB < DatatypeMapping
79
+ #def prot_getProtegeType
80
+ # return PROTEGE_STRING_DATATYPE
81
+ #end
82
+ end
83
+
84
+ class DatatypeMappingIMG < DatatypeMappingBLOB
85
+ #def prot_getProtegeType
86
+ # return PROTEGE_STRING_DATATYPE
87
+ #end
88
+ end
89
+
90
+ class DatatypeMappingGRAPHVIZ < DatatypeMappingLargeText
91
+ end
92
+
93
+ class DatatypeMappingPassword < DatatypeMappingText
94
+ end
95
+
96
+ class DatatypeMappingEmailAddress < DatatypeMappingText
97
+ end
98
+
99
+
@@ -0,0 +1,687 @@
1
+ #UML2 to protege 2000 translator
2
+ #xMDA-2006-2007 - Stephane (Pierre) Carrié
3
+ #
4
+ require 'set'
5
+ class Object
6
+ #URI of RDF version 2000
7
+ NS_RDF_2000="http://www.w3.org/2000/01/"
8
+
9
+ #URI of RDF version 1999
10
+ NS_RDF_1999="http://www.w3.org/1999/02/"
11
+
12
+ #URI of RDF type property
13
+ RDF_TYPE_URI="#{NS_RDF_1999}22-rdf-syntax-ns#type"
14
+
15
+ #URI of RDFS label property
16
+ RDF_LABEL_URI="#{NS_RDF_2000}rdf-schema#label"
17
+
18
+ #URI of RDFS sub class of property
19
+ RDF_SUBCLASSOF_URI="#{NS_RDF_2000}rdf-schema#subClassOf"
20
+
21
+ #URI prefix of protege knowledge base
22
+ NS_UML_CLASS="http://protege.stanford.edu/kb"
23
+
24
+ #URI prefix of soa knowledge base
25
+ NS_SOA_CLASS="http://protege.stanford.edu/soa"
26
+
27
+
28
+ #Name of the protege slot containing the name of an instance
29
+ #Name change should be propagated to bootstrap protege model
30
+ PROTEGE_INSTANCE_ALIAS_URI_SUFFIX="UML_INSTANCE_ALIAS"
31
+
32
+ #Name of the protege slot containing the name of a use case sub-instance.
33
+ #(
34
+ PROTEGE_USE_CASE_ENV_URI_SUFFIX="UML_DATA_SET_NAME"
35
+
36
+ end
37
+
38
+ class String
39
+ #insert space between camelcase
40
+ #Example:
41
+ # unCamelCase("abcDef") returns "abc Def"
42
+ def unCamelCase
43
+ return gsub(/([a-z])([A-Z])/,'\1 \2')
44
+ end
45
+
46
+ #returns string after
47
+ def nt_escape
48
+ #TODO: gestion generique de l'unicode
49
+ return self.to_s.
50
+ gsub(/\\n/,'<br>').
51
+ gsub(/\\u0085/,''). # next line ???
52
+ gsub(/\\u00EE/,'i'). # i acute
53
+ gsub(/\\u00F4/,'o'). # o circ
54
+ gsub(/\\u00E7/,'c'). # c cedil
55
+ gsub(/\\u00E0/,'a'). # a grav
56
+ gsub(/\\u00E8/,'e'). # e grav
57
+ gsub(/\\u00E9/,'e'). # e acute
58
+ gsub(/\\u00C9/,'E'). # E acute
59
+ gsub(/\\u00EA/,'e'). # e circ
60
+ tr("^\#*a-zA-Z0-9 ,.!?:_\'\/<>-",'_').
61
+ gsub(/<br>/,'\\n')
62
+ end
63
+ end
64
+
65
+ module Mrdf_Resource
66
+
67
+ attr :kb_exported
68
+
69
+ def prot_safe(str)
70
+ return str.to_s.nt_escape.tr('^a-zA-Z0-9_','_')
71
+ end
72
+
73
+ #protege 2000 uri used for a resource
74
+ #(redefined for sub-classes)
75
+ def prot_uri
76
+ UriNamespace.instance.unalias(rdf_uri)
77
+ end
78
+
79
+ #label used in protege 2000
80
+ def prot_label
81
+ return "#{NS_UML_CLASS}##{prot_safe(uri)}"
82
+ end
83
+ end
84
+
85
+ module Muml_Element
86
+ #writes uml comment as and rdf comment
87
+ def append_comment
88
+ c=""
89
+ uml_ownedComment.each { |comment|
90
+ if comment.uml_body_one
91
+ c=c+comment.uml_body_one
92
+ end
93
+ }
94
+ write("<#{self.prot_uri}> <#{NS_RDF_2000}rdf-schema#comment> \"#{c.nt_escape}\".\n") if c!=""
95
+ end
96
+ end
97
+
98
+
99
+ module Muml_Classifier
100
+ ProtegeURI=Hash.new
101
+
102
+ #label used in protege 2000
103
+ def prot_label
104
+ return "#{prot_uri_local}"
105
+ end
106
+
107
+ def prot_uri_local
108
+ b="#{prot_safe(uml_name)}"
109
+ s=b
110
+ i=1
111
+ while true
112
+ if ProtegeURI[s].nil?
113
+ ProtegeURI[s]=self
114
+ return s
115
+ end
116
+ return s if ProtegeURI[s]==self
117
+ i=i+1
118
+ s=b+"_"+i.to_s
119
+ end
120
+ end
121
+
122
+ #writes sub class of rdf instructions
123
+ def prot_writeSubClassOf
124
+ uml_generalization.each { |g|
125
+ write("<#{prot_uri}> <#{RDF_SUBCLASSOF_URI}> <#{g.uml_general_one.prot_uri}> .\n")
126
+ }
127
+ end
128
+
129
+ #RDF metaclass for a classifier
130
+ RDF_METACLASS_URI="#{NS_UML_CLASS}#UML_METACLASS"
131
+
132
+ def mainSubClassOfURI
133
+ return "#{NS_UML_CLASS}#UML_CLASS"
134
+ end
135
+
136
+ #writes RDF triple elements describing this classifier element.
137
+ def prot_writeNTriple
138
+ e=self
139
+ write("<#{e.prot_uri}> <#{RDF_TYPE_URI}> <#{RDF_METACLASS_URI}> .\n")
140
+ write("<#{e.prot_uri}> <#{NS_RDF_2000}rdf-schema#label> \"#{e.uml_name.to_s.nt_escape}\" .\n")
141
+ if e.uml_isAbstract? || e.kind_of?(Muml_Interface) #|| e.kind_of?(Muml_UseCase)
142
+ write("<#{e.prot_uri}> <http://protege.stanford.edu/system#role> \"abstract\" .\n")
143
+ end
144
+ e.append_comment
145
+ e.prot_writeSubClassOf
146
+
147
+ write("<#{e.prot_uri}> <#{RDF_SUBCLASSOF_URI}> <#{mainSubClassOfURI}> .\n")
148
+ write("<#{e.prot_uri}> <#{NS_UML_CLASS}#UML_LABEL> \"#{prot_label}\" .\n")
149
+ write("<#{e.prot_uri}> <#{NS_UML_CLASS}#UML_URI> \"#{UriNamespace.instance.unalias(e.rdf_uri)}\" .\n")
150
+
151
+ end
152
+ end
153
+
154
+ module Muml_PrimitiveType
155
+ #protege uri for a primitive type
156
+ def prot_uri
157
+ return "#{NS_RDF_2000}rdf-schema#Literal"
158
+ end
159
+
160
+ #Protege 2000 predefined type string
161
+ PROTEGE_STRING_DATATYPE="string"
162
+
163
+ #Protege 2000 predefined type boolean
164
+ PROTEGE_BOOLEAN_DATATYPE="boolean"
165
+
166
+ #Protege 2000 predefined type integer
167
+ PROTEGE_INTEGER_DATATYPE="integer"
168
+
169
+ #returns protege primitive type for this datatype
170
+ def prot_primitive_type
171
+ r=DatatypeMapping.instance.getMapping(self).prot_getProtegeType
172
+ return r unless r.nil?
173
+
174
+ msg="No protege mapping for primitive type \"#{uml_name}\" (uri=#{rdf_uri})"
175
+ log.warn(msg) unless log_already_displayed?(msg)
176
+ return PROTEGE_STRING_DATATYPE
177
+ end
178
+
179
+ end
180
+
181
+ module Muml_TypedElement
182
+ #returns true if an homonym property exists in model
183
+ def otherWithSameName?
184
+ n= cardWithSameName(uml_name.to_s)
185
+ return false if n==1
186
+ return true if n>1
187
+ log.error "Error: #{n} #{uml_name.to_s}"
188
+ end
189
+
190
+ #check model for homonym properties
191
+ def cardWithSameName(str)
192
+ @@otherWithSameName_cache||=nil
193
+ return @@otherWithSameName_cache[str] if @@otherWithSameName_cache
194
+ @@otherWithSameName_cache=Hash.new(0)
195
+
196
+ rdf_Repository.uml_Class_all.each {|c| c.uml_ownedAttribute.each {|e|
197
+ str2=e.uml_name.to_s
198
+ @@otherWithSameName_cache[str2]+=1
199
+ }}
200
+ @@otherWithSameName_cache.each { |k,v|
201
+ log.warn "WARNING: UML Model contains homonyms property : #{k} (#{v} times)" if v>1 && !k.include?("$")
202
+ }
203
+ return @@otherWithSameName_cache[str]
204
+ end
205
+
206
+ #returns protege label for this property
207
+ def prot_label
208
+ return "#{prot_safe(uml_name)}" unless uml_name.to_s.empty?
209
+ oe=umlx_otherEnd
210
+ return "inv_#{prot_safe(oe.uml_name)}" unless oe.uml_name.to_s.empty?
211
+ return "#{prot_safe(uri)}"
212
+ end
213
+
214
+ #Metaclass URI used for a property in Protege
215
+ RDF_METACLASS_URI="http://protege.stanford.edu/kb#UML_SLOT"
216
+
217
+ end
218
+ module Muml_Parameter
219
+ def prot_writeNTriple_parameter(owner)
220
+ o=self
221
+ # e=owner
222
+ # write("<#{o.prot_uri}> <#{NS_RDF_2000}rdf-schema#domain> <#{e.prot_uri}> .\n");
223
+ # append_comment
224
+ # o.uml_type.each { |t|
225
+ # if (t.kind_of?(Cuml_PrimitiveType))
226
+ # write("<#{o.prot_uri}> <#{NS_RDF_2000}rdf-schema#range> <#{t.prot_uri}> .\n")
227
+ # write(%{<#{o.prot_uri}> <http://protege.stanford.edu/system#range> "#{t.prot_primitive_type}" .\n})
228
+ # elsif t.kind_of?(Cuml_Enumeration)
229
+ # write("<#{o.prot_uri}> <#{NS_RDF_2000}rdf-schema#range> <#{NS_RDF_2000}rdf-schema#Literal> .\n")
230
+ # write(%{<#{o.prot_uri}> <http://protege.stanford.edu/system#range> "symbol" .\n})
231
+ # t.uml_ownedLiteral.each {|c|
232
+ # write(%{<#{o.prot_uri}> <http://protege.stanford.edu/system#allowedValues> "#{c}" .\n})
233
+ # }
234
+ # else
235
+ # write("<#{o.prot_uri}> <#{NS_RDF_2000}rdf-schema#range> <#{t.prot_uri}> .\n")
236
+ # end
237
+ # }
238
+ write("<#{o.prot_uri}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <http://protege.stanford.edu/kb#UML_SLOT> .\n")
239
+ write("<#{o.prot_uri}> <http://protege.stanford.edu/kb#UML_LABEL> \"#{o.prot_label} (#{owner.prot_label} from #{owner.umlx_owner_one.prot_label})\".\n")
240
+ write("<#{o.prot_uri}> <#{NS_UML_CLASS}#UML_URI> \"#{UriNamespace.instance.unalias(o.rdf_uri)}\" .\n")
241
+ write("<#{o.prot_uri}> <#{RDF_LABEL_URI}> \"#{o.uml_name.to_s.nt_escape}\" .\n")
242
+
243
+ cardUp=umlx_upperValueIsOne? ? "1" : "*"
244
+ cardLow=umlx_lowerValueIsZero? ? "0" : "1"
245
+
246
+ # if ! uml_qualifier.empty?
247
+ # #qualifiers changes cardinality semantics
248
+ # cardLow="0"
249
+ # cardUp="*"
250
+ # end
251
+
252
+ #if isComposition
253
+ # log.debug "est une composition"
254
+ # cardLow="1"
255
+ #end
256
+
257
+ if cardLow!="0"
258
+ write("<#{o.prot_uri}> <http://protege.stanford.edu/system#minCardinality> \"#{cardLow}\" .\n")
259
+ end
260
+
261
+ if cardUp!="-1"
262
+ write("<#{o.prot_uri}> <http://protege.stanford.edu/system#maxCardinality> \"#{cardUp}\" .\n")
263
+ end
264
+ end
265
+ end
266
+ module Muml_Property
267
+
268
+
269
+ #writes this property as RDF triples
270
+ def prot_writeNTriple
271
+ # against infinite loop
272
+ return unless @kb_exported.nil?
273
+ @kb_exported=true
274
+
275
+ if (uml_association.length==0)
276
+ prot_writeNTriple_common
277
+ #prot_writeNTriple_attribute
278
+ else
279
+ prot_writeNTriple_common
280
+ prot_writeNTriple_association
281
+ end
282
+ end
283
+
284
+ #writes property elements common to association and attribute as RDF triples
285
+ def prot_writeNTriple_common
286
+ o=self
287
+ e=o.umlx_class_one
288
+ #e=o.uml_ownedAttribute_inv
289
+ #e=uml_class_one if e.nil?
290
+ if e.nil?
291
+ #log.debug "null!!!!"
292
+ return
293
+ end
294
+
295
+ write("<#{o.prot_uri}> <#{NS_RDF_2000}rdf-schema#domain> <#{e.prot_uri}> .\n");
296
+ append_comment
297
+ o.uml_type.each { |t|
298
+ if (t.kind_of?(Cuml_PrimitiveType))
299
+ write("<#{o.prot_uri}> <#{NS_RDF_2000}rdf-schema#range> <#{t.prot_uri}> .\n")
300
+ write(%{<#{o.prot_uri}> <http://protege.stanford.edu/system#range> "#{t.prot_primitive_type}" .\n})
301
+ elsif t.kind_of?(Cuml_Enumeration)
302
+ write("<#{o.prot_uri}> <#{NS_RDF_2000}rdf-schema#range> <#{NS_RDF_2000}rdf-schema#Literal> .\n")
303
+ write(%{<#{o.prot_uri}> <http://protege.stanford.edu/system#range> "symbol" .\n})
304
+ t.uml_ownedLiteral.each {|c|
305
+ write(%{<#{o.prot_uri}> <http://protege.stanford.edu/system#allowedValues> "#{c}" .\n})
306
+ }
307
+ else
308
+ write("<#{o.prot_uri}> <#{NS_RDF_2000}rdf-schema#range> <#{t.prot_uri}> .\n")
309
+ end
310
+ }
311
+ write("<#{o.prot_uri}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <http://protege.stanford.edu/kb#UML_SLOT> .\n")
312
+ write("<#{o.prot_uri}> <http://protege.stanford.edu/kb#UML_LABEL> \"#{o.prot_label}\".\n")
313
+ write("<#{o.prot_uri}> <#{NS_UML_CLASS}#UML_URI> \"#{UriNamespace.instance.unalias(o.rdf_uri)}\" .\n")
314
+ write("<#{o.prot_uri}> <#{RDF_LABEL_URI}> \"#{o.uml_name.to_s.nt_escape}\" .\n")
315
+
316
+ cardUp=umlx_upperValueIsOne? ? "1" : "*"
317
+ cardLow=umlx_lowerValueIsZero? ? "0" : "1"
318
+
319
+ if ! uml_qualifier.empty?
320
+ #qualifiers changes cardinality semantics
321
+ cardLow="0"
322
+ cardUp="*"
323
+ end
324
+
325
+ ##if isComposition
326
+ # log.debug "est une composition"
327
+ # cardLow="1"
328
+ #end
329
+
330
+ if cardLow!="0"
331
+ write("<#{o.prot_uri}> <http://protege.stanford.edu/system#minCardinality> \"#{cardLow}\" .\n")
332
+ end
333
+
334
+ if cardUp!="-1"
335
+ write("<#{o.prot_uri}> <http://protege.stanford.edu/system#maxCardinality> \"#{cardUp}\" .\n")
336
+ end
337
+ end
338
+
339
+ def prot_writeNTriple_association
340
+ write("<#{prot_uri}> <http://protege.stanford.edu/system#inverseProperty> <#{umlx_otherEnd.prot_uri}> .\n");
341
+ # make sure other end is exported when it is not navigable.
342
+ umlx_otherEnd.prot_writeNTriple unless umlx_otherEnd.umlx_isNavigable?
343
+ end
344
+ end
345
+
346
+
347
+ module Muml_Class
348
+ #writes sub class of rdf instructions
349
+ def prot_writeSubClassOf
350
+ super # Classifier
351
+ uml_implementation.each { |g|
352
+ write("<#{prot_uri}> <#{RDF_SUBCLASSOF_URI}> <#{g.uml_supplier_one.prot_uri}> .\n")
353
+ }
354
+ end
355
+ end
356
+
357
+
358
+
359
+ module Muml_UseCase
360
+ def mainSubClassOfURI
361
+ return "#{NS_UML_CLASS}#UML_TEST_DATA_SET"
362
+ end
363
+ end
364
+
365
+ module Mrdf_Repository
366
+ # generates Meta editor project for protege 2000
367
+ def generateMetaEditor(targetFile)
368
+ #log.debug "targetFile=#{targetFile}"
369
+ s=UML2_RDFS_NT_FILE
370
+ t="#{targetFile}_meta.rdfs.nt"
371
+
372
+ FileUtils.copy(s,t)
373
+ if File.exist?(targetFile+"_meta.rdfs")
374
+ log.info "Overwriting existing file: #{targetFile}_meta.rdfs"
375
+ end
376
+ translateToXML(targetFile+"_meta.rdfs.nt",targetFile+"_meta.rdfs")
377
+
378
+ if File.exist?(targetFile+"_meta.rdf")
379
+ log.info "Using already existing file: #{targetFile}_meta.rdf"
380
+ else
381
+ translateToXML(targetFile.to_s,targetFile+"_meta.rdf")
382
+ end
383
+
384
+ if File.exist?(targetFile+"_meta.pprj")
385
+ log.info "Using already existing file: #{targetFile}_meta.pprj"
386
+ else
387
+ ext="pprj"
388
+ log.info "creating .#{ext}"
389
+ mtk_writeSession(targetFile+"_meta.#{ext}") {
390
+ File.open("#{File.dirname(__FILE__)}/MYMODEL_meta.#{ext}",'r') { |src|
391
+ src.each {|line|
392
+ x=line.gsub(/MYMODEL_meta/,"#{File.basename(targetFile)}_meta")
393
+ write(x)
394
+ }
395
+ }
396
+ }
397
+ end
398
+ end
399
+
400
+ #generates protege 2000 knowledge base project files
401
+ def generateRDFS(targetFile)
402
+ #generateMetaEditor(targetFile)
403
+ generateProtegeKbProject(targetFile)
404
+ generateProtegeKbRDFS(targetFile)
405
+ end
406
+
407
+ PROJECT_FILE_SUFFIX=""
408
+
409
+ #generates protege 2000 knowledge base project file and RDF file.
410
+ #internal used
411
+ def generateProtegeKbProject(targetFile)
412
+ ["pprj","rdf"].each { |ext|
413
+ if File.exist?(targetFile+"#{PROJECT_FILE_SUFFIX}.#{ext}")
414
+ log.debug { "Using already existing file: #{ext}" }
415
+ next
416
+ end
417
+ log.info "creating .#{ext}"
418
+ mtk_writeSession(targetFile+"#{PROJECT_FILE_SUFFIX}.#{ext}") {
419
+ File.open("#{File.dirname(__FILE__)}/MYMODEL_kb.#{ext}",'r') { |src|
420
+ src.each {|line|
421
+ x=line.gsub(/MYMODEL_kb/,"#{File.basename(targetFile)}#{PROJECT_FILE_SUFFIX}")
422
+ write(x)
423
+ }
424
+ }
425
+ }
426
+ }
427
+ end
428
+
429
+
430
+ #generates Protege 2000 RDFS file of a knowledge base project.
431
+ def generateProtegeKbRDFS(targetFile)
432
+ targetFileRDFS=targetFile+"#{PROJECT_FILE_SUFFIX}.rdfs.nt"
433
+ targetFileXML=targetFile+"#{PROJECT_FILE_SUFFIX}.rdfs"
434
+
435
+ #mark temporary file for deletion
436
+ mtk_addTempFileToDelete(targetFileRDFS)
437
+
438
+ mtk_writeSession(targetFileRDFS) {
439
+ write(kbRDFS_header)
440
+ uml_Model_all.each { |m|
441
+ m.uml_Class_all.each {|c|
442
+ next if c.kind_of?(Muml_Enumeration)
443
+ c.prot_writeNTriple
444
+ c.uml_ownedAttribute.each {|a|
445
+ a.prot_writeNTriple
446
+ }
447
+ c.uml_ownedOperation.each {|a|
448
+ (a.uml_ownedParameter+a.uml_returnResult).each {|param|
449
+ # puts "--> param: #{param}"
450
+ param.prot_writeNTriple_parameter(a)
451
+ }
452
+ }
453
+ }
454
+ m.uml_UseCase_all.each {|uc|
455
+ uc.prot_writeNTriple
456
+ }
457
+ }
458
+ kbRDFS_writeComponents
459
+ write(kbRDFS_footer)
460
+ }
461
+ translateToXML(targetFileRDFS.to_s,targetFileXML)
462
+ end
463
+
464
+ # Protege 2000 RDFS knowledge base file footer
465
+ def kbRDFS_footer
466
+ return "# end\n"
467
+ end
468
+
469
+ SOA_URI="#{NS_SOA_CLASS}#soa"
470
+ DATAFILTER_URI="#{NS_SOA_CLASS}#dataFilter"
471
+ DATAFILTERNAME_URI="#{NS_SOA_CLASS}#dataFilterName"
472
+ SERVICE_URI="#{NS_SOA_CLASS}#service"
473
+ ROOT_URI="#{NS_RDF_2000}rdf-schema#Resource"
474
+ PREDEF_DATAFILTER_URI="#{NS_SOA_CLASS}#predefinedDataFilter"
475
+ CUSTOM_DATAFILTER_URI="#{NS_SOA_CLASS}#customDataFilter"
476
+ DATAFILTER_RULE_URI="#{NS_SOA_CLASS}#dataFilterRule"
477
+ DATAFILTER_PROPERTY_RULE_URI="#{NS_SOA_CLASS}#dataPropertyFilterRule"
478
+ DATAFILTER_PARAMETER_RULE_URI="#{NS_SOA_CLASS}#dataParameterFilterRule"
479
+ TARGETDATAFILTER_URI="#{NS_SOA_CLASS}#useDataFilter"
480
+ SOURCEDATAFILTER_URI="#{NS_SOA_CLASS}#sourceDataFilter"
481
+ FILTERED_FIELD_URI="#{NS_SOA_CLASS}#filteredProperty"
482
+
483
+ #list of SOA URI for use in exclusion list in rdfToJava
484
+ SOA_URI_SET=[
485
+ PREDEF_DATAFILTER_URI,
486
+ CUSTOM_DATAFILTER_URI,
487
+ DATAFILTER_RULE_URI,
488
+ DATAFILTER_PROPERTY_RULE_URI,
489
+ DATAFILTER_PARAMETER_RULE_URI,
490
+ TARGETDATAFILTER_URI,
491
+ SOURCEDATAFILTER_URI,
492
+ FILTERED_FIELD_URI
493
+ ]
494
+
495
+ # Protege 2000 RDFS knowledge base file header
496
+ def kbRDFS_header
497
+ nt_top='# debut\n'
498
+ ['UML_CLASS','UML_TEST_DATA_SET'].each {|c|
499
+ nt_top=nt_top+<<END2
500
+ <#{NS_UML_CLASS}##{c}> <http://protege.stanford.edu/system#role> "abstract" .
501
+ <#{NS_UML_CLASS}##{c}> <#{NS_RDF_2000}rdf-schema#label> "" .
502
+ <#{NS_UML_CLASS}##{c}> <#{NS_RDF_2000}rdf-schema#subClassOf> <#{ROOT_URI}> .
503
+ <#{NS_UML_CLASS}##{c}> <#{NS_RDF_2000}rdf-schema#comment> "Cette classe est la racine des classes de type UML. \\nFevrier 2006 - FTRD/BIZZ/CIL\\nStep#{""}hane Car#{""}rie".
504
+ <#{NS_UML_CLASS}##{c}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <http://protege.stanford.edu/kb#UML_METACLASS> .
505
+ END2
506
+ }
507
+
508
+
509
+ nt_top=nt_top+<<END_SOA
510
+ <#{SOA_URI}> <http://protege.stanford.edu/system#role> "abstract" .
511
+ <#{SOA_URI}> <#{NS_RDF_2000}rdf-schema#label> "" .
512
+ <#{SOA_URI}> <#{NS_RDF_2000}rdf-schema#subClassOf> <#{ROOT_URI}> .
513
+ <#{SOA_URI}> <#{NS_RDF_2000}rdf-schema#comment> "SOA sub-model root element. \\nMay 2008 - FTRD/BIZZ/CIL\\nStep#{""}hane Car#{""}rie".
514
+ <#{SOA_URI}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <http://protege.stanford.edu/kb#UML_METACLASS> .
515
+ END_SOA
516
+
517
+
518
+ nt_top=nt_top+<<END_SOA
519
+ <#{DATAFILTER_URI}> <#{NS_RDF_2000}rdf-schema#label> "" .
520
+ <#{DATAFILTER_URI}> <http://protege.stanford.edu/system#role> "abstract" .
521
+ <#{DATAFILTER_URI}> <#{NS_RDF_2000}rdf-schema#subClassOf> <#{SOA_URI}> .
522
+ <#{DATAFILTER_URI}> <#{NS_RDF_2000}rdf-schema#comment> "SOA data filter rule inventory. \\nMay 2008 - FTRD/BIZZ/CIL\\nStep#{""}hane Car#{""}rie".
523
+ <#{DATAFILTER_URI}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <http://protege.stanford.edu/kb#UML_METACLASS> .
524
+ <#{DATAFILTER_URI}> <#{NS_UML_CLASS}#UML_URI> "#{DATAFILTER_URI}" .
525
+
526
+ <#{DATAFILTERNAME_URI}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <#{NS_RDF_1999}22-rdf-syntax-ns#Property> .
527
+ <#{DATAFILTERNAME_URI}> <http://protege.stanford.edu/system#maxCardinality> "1" .
528
+ <#{DATAFILTERNAME_URI}> <#{NS_RDF_2000}rdf-schema#label> "dataFilterName" .
529
+ <#{DATAFILTERNAME_URI}> <#{NS_RDF_2000}rdf-schema#domain> <#{DATAFILTER_URI}> .
530
+ <#{DATAFILTERNAME_URI}> <#{NS_RDF_2000}rdf-schema#range> <#{NS_RDF_2000}rdf-schema#Literal> .
531
+ <#{DATAFILTERNAME_URI}> <#{NS_RDF_2000}rdf-schema#comment> "SOA dataFilter name\\nMay 2008 - FTRD/BIZZ/CIL\\nStep#{""}hane Pie#{""}rre Car#{""}rie" .
532
+
533
+ <#{PREDEF_DATAFILTER_URI}> <#{NS_RDF_2000}rdf-schema#label> "" .
534
+ <#{PREDEF_DATAFILTER_URI}> <#{NS_RDF_2000}rdf-schema#subClassOf> <#{DATAFILTER_URI}> .
535
+ <#{PREDEF_DATAFILTER_URI}> <#{NS_RDF_2000}rdf-schema#comment> "SOA predefined data filter rule. \\nMay 2008 - FTRD/BIZZ/CIL\\nStep#{""}hane Car#{""}rie" .
536
+ <#{PREDEF_DATAFILTER_URI}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <http://protege.stanford.edu/kb#UML_METACLASS> .
537
+ <#{PREDEF_DATAFILTER_URI}> <#{NS_UML_CLASS}#UML_URI> "#{PREDEF_DATAFILTER_URI}" .
538
+
539
+ <#{CUSTOM_DATAFILTER_URI}> <#{NS_RDF_2000}rdf-schema#label> "" .
540
+ <#{CUSTOM_DATAFILTER_URI}> <#{NS_RDF_2000}rdf-schema#subClassOf> <#{DATAFILTER_URI}> .
541
+ <#{CUSTOM_DATAFILTER_URI}> <#{NS_RDF_2000}rdf-schema#comment> "SOA custom data filter rule. \\nMay 2008 - FTRD/BIZZ/CIL\\nStep#{""}hane Car#{""}rie" .
542
+ <#{CUSTOM_DATAFILTER_URI}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <http://protege.stanford.edu/kb#UML_METACLASS> .
543
+ <#{CUSTOM_DATAFILTER_URI}> <#{NS_UML_CLASS}#UML_URI> "#{CUSTOM_DATAFILTER_URI}" .
544
+
545
+ <#{DATAFILTER_RULE_URI}> <#{NS_RDF_2000}rdf-schema#label> "" .
546
+ <#{DATAFILTER_RULE_URI}> <http://protege.stanford.edu/system#role> "abstract" .
547
+ <#{DATAFILTER_RULE_URI}> <#{NS_RDF_2000}rdf-schema#subClassOf> <#{SOA_URI}> .
548
+ <#{DATAFILTER_RULE_URI}> <#{NS_RDF_2000}rdf-schema#comment> "SOA data filter rule inventory. \\nMay 2008 - FTRD/BIZZ/CIL\\nStep#{""}hane Car#{""}rie".
549
+ <#{DATAFILTER_RULE_URI}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <http://protege.stanford.edu/kb#UML_METACLASS> .
550
+ <#{DATAFILTER_RULE_URI}> <#{NS_UML_CLASS}#UML_URI> "#{DATAFILTER_RULE_URI}" .
551
+
552
+ <#{DATAFILTER_PROPERTY_RULE_URI}> <#{NS_RDF_2000}rdf-schema#label> "" .
553
+ <#{DATAFILTER_PROPERTY_RULE_URI}> <#{NS_RDF_2000}rdf-schema#subClassOf> <#{DATAFILTER_RULE_URI}> .
554
+ <#{DATAFILTER_PROPERTY_RULE_URI}> <#{NS_RDF_2000}rdf-schema#comment> "SOA data filter property rule. \\nMay 2008 - FTRD/BIZZ/CIL\\nStep#{""}hane Car#{""}rie".
555
+ <#{DATAFILTER_PROPERTY_RULE_URI}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <http://protege.stanford.edu/kb#UML_METACLASS> .
556
+ <#{DATAFILTER_PROPERTY_RULE_URI}> <#{NS_UML_CLASS}#UML_URI> "#{DATAFILTER_PROPERTY_RULE_URI}" .
557
+
558
+ <#{SOURCEDATAFILTER_URI}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <#{NS_RDF_1999}22-rdf-syntax-ns#Property> .
559
+ <#{SOURCEDATAFILTER_URI}> <http://protege.stanford.edu/system#maxCardinality> "1" .
560
+ <#{SOURCEDATAFILTER_URI}> <#{NS_RDF_2000}rdf-schema#label> "sourceDataFilter" .
561
+ <#{SOURCEDATAFILTER_URI}> <#{NS_RDF_2000}rdf-schema#domain> <#{DATAFILTER_RULE_URI}> .
562
+ <#{SOURCEDATAFILTER_URI}> <#{NS_RDF_2000}rdf-schema#range> <#{DATAFILTER_URI}> .
563
+ <#{SOURCEDATAFILTER_URI}> <#{NS_RDF_2000}rdf-schema#comment> "SOA sourceDataFilter name\\nMay 2008 - FTRD/BIZZ/CIL\\nStep#{""}hane Pie#{""}rre Car#{""}rie".
564
+
565
+ <#{TARGETDATAFILTER_URI}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <#{NS_RDF_1999}22-rdf-syntax-ns#Property> .
566
+ <#{TARGETDATAFILTER_URI}> <http://protege.stanford.edu/system#maxCardinality> "1" .
567
+ <#{TARGETDATAFILTER_URI}> <#{NS_RDF_2000}rdf-schema#label> "targetDataFilter" .
568
+ <#{TARGETDATAFILTER_URI}> <#{NS_RDF_2000}rdf-schema#domain> <#{DATAFILTER_RULE_URI}> .
569
+ <#{TARGETDATAFILTER_URI}> <#{NS_RDF_2000}rdf-schema#range> <#{DATAFILTER_URI}> .
570
+ <#{TARGETDATAFILTER_URI}> <#{NS_RDF_2000}rdf-schema#comment> "SOA sourceDataFilter name\\nMay 2008 - FTRD/BIZZ/CIL\\nStep#{""}hane Pie#{""}rre Car#{""}rie".
571
+
572
+ <#{FILTERED_FIELD_URI}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <#{NS_RDF_1999}22-rdf-syntax-ns#Property> .
573
+ <#{FILTERED_FIELD_URI}> <http://protege.stanford.edu/system#maxCardinality> "1" .
574
+ <#{FILTERED_FIELD_URI}> <#{NS_RDF_2000}rdf-schema#label> "filteredProperty" .
575
+ <#{FILTERED_FIELD_URI}> <#{NS_RDF_2000}rdf-schema#domain> <#{DATAFILTER_RULE_URI}> .
576
+ <#{FILTERED_FIELD_URI}> <#{NS_RDF_2000}rdf-schema#range> <http://protege.stanford.edu/kb#UML_SLOT> .
577
+ <#{FILTERED_FIELD_URI}> <#{NS_RDF_2000}rdf-schema#comment> "SOA sourceDataFilter name\\nMay 2008 - FTRD/BIZZ/CIL\\nStep#{""}hane Pie#{""}rre Car#{""}rie".
578
+
579
+ <#{DATAFILTER_PARAMETER_RULE_URI}> <#{NS_RDF_2000}rdf-schema#label> "" .
580
+ <#{DATAFILTER_PARAMETER_RULE_URI}> <#{NS_RDF_2000}rdf-schema#subClassOf> <#{DATAFILTER_RULE_URI}> .
581
+ <#{DATAFILTER_PARAMETER_RULE_URI}> <#{NS_RDF_2000}rdf-schema#comment> "SOA data filter parameter rule. \\nMay 2008 - FTRD/BIZZ/CIL\\nStep#{""}hane Car#{""}rie".
582
+ <#{DATAFILTER_PARAMETER_RULE_URI}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <http://protege.stanford.edu/kb#UML_METACLASS> .
583
+ <#{DATAFILTER_PARAMETER_RULE_URI}> <#{NS_UML_CLASS}#UML_URI> "#{DATAFILTER_PARAMETER_RULE_URI}" .
584
+
585
+ END_SOA
586
+
587
+
588
+ nt_top=nt_top+<<END3
589
+ <#{NS_UML_CLASS}#UML_METACLASS> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <#{NS_RDF_2000}rdf-schema#Class> .
590
+ <#{NS_UML_CLASS}#UML_METACLASS> <#{NS_RDF_2000}rdf-schema#label> "UML_METACLASS" .
591
+ <#{NS_UML_CLASS}#UML_METACLASS> <#{NS_RDF_2000}rdf-schema#subClassOf> <#{NS_RDF_2000}rdf-schema#Class> .
592
+ <#{NS_UML_CLASS}#UML_METACLASS> <#{NS_RDF_2000}rdf-schema#comment> "Cette classe est la metaclasse des classes de type UML. \\nFevrier 2006 - FTRD/BIZZ/CIL\\nStep#{""}hane Pie#{""}rre Car#{""}rie".
593
+ <http://protege.stanford.edu/kb#UML_SLOT> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <#{NS_RDF_2000}rdf-schema#Class> .
594
+ <http://protege.stanford.edu/kb#UML_SLOT> <#{NS_RDF_2000}rdf-schema#subClassOf> <#{NS_RDF_1999}22-rdf-syntax-ns#Property> .
595
+ <#{NS_UML_CLASS}##{PROTEGE_INSTANCE_ALIAS_URI_SUFFIX}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <#{NS_RDF_1999}22-rdf-syntax-ns#Property> .
596
+ <#{NS_UML_CLASS}##{PROTEGE_INSTANCE_ALIAS_URI_SUFFIX}> <http://protege.stanford.edu/system#maxCardinality> "1" .
597
+ <#{NS_UML_CLASS}##{PROTEGE_INSTANCE_ALIAS_URI_SUFFIX}> <#{NS_RDF_2000}rdf-schema#label> "#{PROTEGE_INSTANCE_ALIAS_URI_SUFFIX}" .
598
+ <#{NS_UML_CLASS}##{PROTEGE_INSTANCE_ALIAS_URI_SUFFIX}> <#{NS_RDF_2000}rdf-schema#domain> <http://protege.stanford.edu/kb#UML_CLASS> .
599
+ <#{NS_UML_CLASS}##{PROTEGE_INSTANCE_ALIAS_URI_SUFFIX}> <#{NS_RDF_2000}rdf-schema#range> <#{NS_RDF_2000}rdf-schema#Literal> .
600
+ <#{NS_UML_CLASS}##{PROTEGE_INSTANCE_ALIAS_URI_SUFFIX}> <#{NS_RDF_2000}rdf-schema#comment> "UML Alias used as key in other tools (xmda java junit, ...)\\n - FTRD/BIZZ/CIL\\nStep#{""}hane Pie#{""}rre Car#{""}rie".
601
+ END3
602
+
603
+ nt_top=nt_top+<<END
604
+ <#{NS_UML_CLASS}##{PROTEGE_USE_CASE_ENV_URI_SUFFIX}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <#{NS_RDF_1999}22-rdf-syntax-ns#Property> .
605
+ <#{NS_UML_CLASS}##{PROTEGE_USE_CASE_ENV_URI_SUFFIX}> <http://protege.stanford.edu/system#maxCardinality> "1" .
606
+ <#{NS_UML_CLASS}##{PROTEGE_USE_CASE_ENV_URI_SUFFIX}> <#{NS_RDF_2000}rdf-schema#label> "#{PROTEGE_USE_CASE_ENV_URI_SUFFIX}" .
607
+ <#{NS_UML_CLASS}##{PROTEGE_USE_CASE_ENV_URI_SUFFIX}> <#{NS_RDF_2000}rdf-schema#domain> <http://protege.stanford.edu/kb#UML_TEST_DATA_SET> .
608
+ <#{NS_UML_CLASS}##{PROTEGE_USE_CASE_ENV_URI_SUFFIX}> <#{NS_RDF_2000}rdf-schema#range> <#{NS_RDF_2000}rdf-schema#Literal> .
609
+ <#{NS_UML_CLASS}##{PROTEGE_USE_CASE_ENV_URI_SUFFIX}> <#{NS_RDF_2000}rdf-schema#comment> "UML Alias used as key in other tools (xmda java junit, ...)\\n - FTRD/BIZZ/CIL\\nStep#{""}hane Pier#{""}re Car#{""}rie".
610
+ END
611
+
612
+
613
+
614
+
615
+ ['UML_LABEL', 'UML_URI'].each{ |k|
616
+ nt_top=nt_top+<<END
617
+ <#{NS_UML_CLASS}##{k}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <#{NS_RDF_1999}22-rdf-syntax-ns#Property> .
618
+ <#{NS_UML_CLASS}##{k}> <http://protege.stanford.edu/system#maxCardinality> "1" .
619
+ <#{NS_UML_CLASS}##{k}> <#{NS_RDF_2000}rdf-schema#label> "#{k}" .
620
+ <#{NS_UML_CLASS}##{k}> <#{NS_RDF_2000}rdf-schema#domain> <http://protege.stanford.edu/kb#UML_METACLASS> .
621
+ <#{NS_UML_CLASS}##{k}> <#{NS_RDF_2000}rdf-schema#domain> <http://protege.stanford.edu/kb#UML_SLOT> .
622
+ <#{NS_UML_CLASS}##{k}> <#{NS_RDF_2000}rdf-schema#range> <#{NS_RDF_2000}rdf-schema#Literal> .
623
+ END
624
+ }
625
+ #<#{NS_UML_CLASS}##{k}> <http://protege.stanford.edu/system#range> "cls" .
626
+ #<#{NS_UML_CLASS}##{k}> <#{NS_RDF_2000}rdf-schema#range> <http://www.w3.org/2000/01/rdf-schema#Class> .
627
+ #<#{NS_UML_CLASS}##{k}> <http://protege.stanford.edu/system#allowedParents> <#{NS_UML_CLASS}#UML_TEST_DATA_SET> .
628
+
629
+ ['UML_REFERENCED_USE_CASE'].each{ |k|
630
+ inv="UML_DATA"
631
+ nt_top=nt_top+<<END
632
+ <#{NS_UML_CLASS}##{k}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <#{NS_RDF_1999}22-rdf-syntax-ns#Property> .
633
+ <#{NS_UML_CLASS}##{k}> <#{NS_RDF_2000}rdf-schema#label> "#{k}" .
634
+ <#{NS_UML_CLASS}##{k}> <#{NS_RDF_2000}rdf-schema#range> <#{NS_UML_CLASS}#UML_TEST_DATA_SET> .
635
+ <#{NS_UML_CLASS}##{k}> <#{NS_RDF_2000}rdf-schema#domain> <#{NS_UML_CLASS}#UML_CLASS> .
636
+ <#{NS_UML_CLASS}##{k}> <http://protege.stanford.edu/system#inverseProperty> <#{NS_UML_CLASS}##{inv}> .
637
+ <#{NS_UML_CLASS}##{inv}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <#{NS_RDF_1999}22-rdf-syntax-ns#Property> .
638
+ <#{NS_UML_CLASS}##{inv}> <#{NS_RDF_2000}rdf-schema#label> "{k}" .
639
+ <#{NS_UML_CLASS}##{inv}> <http://protege.stanford.edu/system#inverseProperty> <#{NS_UML_CLASS}##{k}> .
640
+ <#{NS_UML_CLASS}##{inv}> <#{NS_RDF_2000}rdf-schema#range> <#{NS_UML_CLASS}#UML_CLASS> .
641
+ <#{NS_UML_CLASS}##{inv}> <#{NS_RDF_2000}rdf-schema#domain> <#{NS_UML_CLASS}#UML_TEST_DATA_SET> .
642
+ END
643
+ }
644
+ return nt_top
645
+ end
646
+
647
+ def kbRDFS_writeComponents
648
+ uml_Component_all.each { |c|
649
+ c.kb_writeComponent
650
+ }
651
+ end
652
+ end
653
+
654
+ module Muml_Component
655
+ def kb_writeComponent
656
+ uml_ownedOperation.each {|op|
657
+ op.kb_writeComponentOperation
658
+ }
659
+ end
660
+ end
661
+ module Muml_Operation
662
+
663
+ def kb_writeComponentOperation
664
+ u="#{rdf_uri}_soaOp"
665
+ write <<END
666
+ <#{u}> <#{NS_RDF_2000}rdf-schema#label> "" .
667
+ <#{u}> <#{NS_RDF_2000}rdf-schema#subClassOf> <#{Mrdf_Repository::SERVICE_URI}> .
668
+ <#{u}> <#{NS_RDF_2000}rdf-schema#comment> "Definition for service #{uml_name}" .
669
+ <#{u}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <http://protege.stanford.edu/kb#UML_METACLASS> .
670
+ END
671
+
672
+ (uml_ownedParameter+uml_returnResult).each { |p|
673
+ up="#{p.rdf_uri}-soaMapping"
674
+ write <<END
675
+ <#{up}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <#{NS_RDF_1999}22-rdf-syntax-ns#Property> .
676
+ <#{up}> <http://protege.stanford.edu/system#maxCardinality> "1" .
677
+ <#{up}> <#{NS_RDF_2000}rdf-schema#label> "param#{p}" .
678
+ <#{up}> <#{NS_RDF_2000}rdf-schema#domain> <#{u}> .
679
+ <#{up}> <#{NS_RDF_2000}rdf-schema#range> <#{Mrdf_Repository::DATAFILTER_URI}> .
680
+ <#{up}> <#{NS_RDF_2000}rdf-schema#comment> "service" .
681
+ END
682
+ }
683
+
684
+
685
+ end
686
+ end
687
+