ontomde-core 1.0.2
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.
- data/History.txt +5 -0
- data/Manifest.txt +37 -0
- data/README.txt +48 -0
- data/Rakefile +19 -0
- data/bin/ontomde-core +0 -0
- data/lib/ontomde-core.rb +35 -0
- data/lib/ontomde-core/bootstrap_rdfs.rb +37 -0
- data/lib/ontomde-core/clone.rb +73 -0
- data/lib/ontomde-core/context.rb +115 -0
- data/lib/ontomde-core/customERB.rb +842 -0
- data/lib/ontomde-core/custom_method_missing.rb +53 -0
- data/lib/ontomde-core/delayed.rb +20 -0
- data/lib/ontomde-core/demoInstaller.rb +32 -0
- data/lib/ontomde-core/exceptions.rb +28 -0
- data/lib/ontomde-core/fileLoader.rb +163 -0
- data/lib/ontomde-core/fileTypes.rb +133 -0
- data/lib/ontomde-core/helper.rb +538 -0
- data/lib/ontomde-core/loader.rb +70 -0
- data/lib/ontomde-core/log.rb +32 -0
- data/lib/ontomde-core/meta.rb +316 -0
- data/lib/ontomde-core/profil.rb +62 -0
- data/lib/ontomde-core/resource.rb +272 -0
- data/lib/ontomde-core/resourceSet.rb +173 -0
- data/lib/ontomde-core/triplet.rb +161 -0
- data/lib/ontomde-core/version.rb +5 -0
- data/test/protege/demo.sh +2 -0
- data/test/protege/etatCivil.pprj +891 -0
- data/test/protege/etatCivil.rdf +29 -0
- data/test/protege/etatCivil.rdfs +71 -0
- data/test/protege/test_demo.rb +46 -0
- data/test/test_context.rb +88 -0
- data/test/test_ontomde-core.rb +9 -0
- data/test/test_protected.rb +352 -0
- data/test/test_uri.rb +37 -0
- data/test/unit_test_crash.rb +22 -0
- data/test/unit_test_protected_sample +27 -0
- data/test/unit_test_protected_wrongEnd +9 -0
- metadata +106 -0
@@ -0,0 +1,272 @@
|
|
1
|
+
# Core RDF resource management
|
2
|
+
#:include: ../shared/license.rdoc
|
3
|
+
|
4
|
+
RDF_TRUE="true"
|
5
|
+
RDF_FALSE="false"
|
6
|
+
|
7
|
+
module Mrdf_Resource
|
8
|
+
# Debug method
|
9
|
+
# Dumps to screen the current object.
|
10
|
+
def dump
|
11
|
+
log.debug("\n#{self} dump #{self.class}>\n")
|
12
|
+
instance_variables.each {
|
13
|
+
|c|
|
14
|
+
log.debug("-#{c}- #{instance_variable_get(c).to_s}\n" )
|
15
|
+
}
|
16
|
+
log.debug('methods: ( ')
|
17
|
+
#out.write('methods: ( ')
|
18
|
+
public_methods.each { |m|
|
19
|
+
log.debug( "#{m}, " )
|
20
|
+
}
|
21
|
+
log.debug('<\n')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class Crdf_Resource #< Crdfs_Resource
|
26
|
+
include Mrdf_Resource
|
27
|
+
attr_reader :uri
|
28
|
+
attr_reader :nbrItem
|
29
|
+
attr_reader :rdf_model
|
30
|
+
@@nbrItem=0
|
31
|
+
|
32
|
+
# Utiliser pour un hack
|
33
|
+
def force_rdf_model=(m)
|
34
|
+
@rdf_model=m
|
35
|
+
end
|
36
|
+
|
37
|
+
# Returns a new empty attribute array
|
38
|
+
def createEmptyAttributeValue
|
39
|
+
return ArrayOrSingleElement.new()
|
40
|
+
end
|
41
|
+
|
42
|
+
#initialize a new resource and adds it to the current model.
|
43
|
+
#if uri is nil, a temporary uri is automaticaly generated.
|
44
|
+
#NOTE:
|
45
|
+
# This uri is not suitable for use by mtk_protected.
|
46
|
+
#TODO: ??? add a detection for prexisting uri ???
|
47
|
+
def initialize(model,uri)
|
48
|
+
uri="_transient_#{object_id}" if uri.nil?
|
49
|
+
model[uri]=self
|
50
|
+
@rdf_model=model
|
51
|
+
@uri=uri
|
52
|
+
@@nbrItem=@@nbrItem+1
|
53
|
+
end
|
54
|
+
|
55
|
+
#List of non restable variables
|
56
|
+
@@NonResetableVariables=['@rdf_model','@rdf_type','@uri']
|
57
|
+
|
58
|
+
#Return true if v is a restable property.
|
59
|
+
def isResetable?(v)
|
60
|
+
return ! @@NonResetableVariables.include?(v)
|
61
|
+
end
|
62
|
+
|
63
|
+
# Force reset of this object properties
|
64
|
+
# Every resetable property is set to nil.
|
65
|
+
def forceReset!
|
66
|
+
#log.debug "forceReset #{self}"
|
67
|
+
instance_variables.each { |v|
|
68
|
+
if(isResetable?(v))
|
69
|
+
#log.debug "reset #{v}"
|
70
|
+
instance_variable_set(v,nil)
|
71
|
+
end
|
72
|
+
}
|
73
|
+
end
|
74
|
+
|
75
|
+
#suppress warning
|
76
|
+
alias :nbrItem_org :nbrItem
|
77
|
+
#Number of item loaded since the initilization of the program
|
78
|
+
#Used for monitoring.
|
79
|
+
def nbrItem
|
80
|
+
@@nbrItem
|
81
|
+
end
|
82
|
+
|
83
|
+
#Internal use
|
84
|
+
#
|
85
|
+
def set(var,val)
|
86
|
+
#TODO: cout: 65s -> 82 sur CRX
|
87
|
+
#TODO: 21.8s -> 25,8s -> 19,5s (19/6) sur SID
|
88
|
+
raise Warning.new,'null val in set' if val.nil?
|
89
|
+
raise Warning.new,'null var in set' if var.nil?
|
90
|
+
core_set(:"@#{var}",val)
|
91
|
+
val.core_set(:@ext_isReferencedBy,self) if(val.kind_of?(Crdf_Resource))
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
#Internal use
|
96
|
+
#
|
97
|
+
def core_set(ivar,val)
|
98
|
+
old=instance_variable_get(ivar)
|
99
|
+
if old.nil?
|
100
|
+
old=createEmptyAttributeValue
|
101
|
+
instance_variable_set(ivar,old)
|
102
|
+
end
|
103
|
+
old.push(val)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
class Crdf_Resource
|
108
|
+
attr_reader :rdf_type, :rdfs_label
|
109
|
+
rdf_safe_attr_reader_many :rdfs_subClassOf
|
110
|
+
attr_writer :rdf_type, :rdfs_label
|
111
|
+
|
112
|
+
rdf_safe_attr_reader_many :ext_isReferencedBy
|
113
|
+
|
114
|
+
#TODO: use ??
|
115
|
+
#@rubyName
|
116
|
+
|
117
|
+
def to_yaml
|
118
|
+
'empty'
|
119
|
+
end
|
120
|
+
|
121
|
+
def set_rdfIsRelated(rel)
|
122
|
+
end
|
123
|
+
|
124
|
+
# Internal use
|
125
|
+
#
|
126
|
+
# sets resource uri
|
127
|
+
def rdf_uri=(new_uri)
|
128
|
+
@uri=new_uri
|
129
|
+
end
|
130
|
+
|
131
|
+
#returns resource uri
|
132
|
+
def rdf_uri
|
133
|
+
return @uri
|
134
|
+
end
|
135
|
+
|
136
|
+
#default string converter. Returns uri
|
137
|
+
def to_s
|
138
|
+
return @uri.to_s #"#{@uri}"
|
139
|
+
end
|
140
|
+
|
141
|
+
#Internal use
|
142
|
+
#
|
143
|
+
#Returns the ruby module name corresponding to this ressource
|
144
|
+
def getRubyModuleName
|
145
|
+
return "M#{getRubyName}"
|
146
|
+
end
|
147
|
+
|
148
|
+
#Internal use
|
149
|
+
#
|
150
|
+
#Returns the ruby class name corresponding to this ressource
|
151
|
+
def getRubyClassName
|
152
|
+
return "C#{getRubyName}"
|
153
|
+
end
|
154
|
+
|
155
|
+
#Retrieves a uri from a ruby identifier
|
156
|
+
def getRubyNameInverse(identifier)
|
157
|
+
found=nil
|
158
|
+
rdf_model.each { |k,c|
|
159
|
+
next if c.getRubyName!=identifier.to_s
|
160
|
+
log.error("Ruby name clash for #{identifier} and #{k}") unless found.nil?
|
161
|
+
found=k
|
162
|
+
}
|
163
|
+
log.error("No uri found for ruby identifier #{identifier} ") if found.nil?
|
164
|
+
return found
|
165
|
+
end
|
166
|
+
|
167
|
+
#Transforms a uri to a valid ruby identifier.
|
168
|
+
#cf. getRubyNameInverse
|
169
|
+
def getRubyName
|
170
|
+
return @uri.tr('^a-zA-Z0-9','_')
|
171
|
+
#return @rdf_label if @rdf_label
|
172
|
+
#return self.class.to_s # bootstrap
|
173
|
+
end
|
174
|
+
|
175
|
+
#Internal use
|
176
|
+
def isBootstrap?
|
177
|
+
return self.class.to_s==self.getRubyClassName
|
178
|
+
end
|
179
|
+
|
180
|
+
#Internal use
|
181
|
+
def getRubyAttributeDefinition(model)
|
182
|
+
#todo qqchos pour renvoyer valeur non nil
|
183
|
+
cmd1=''
|
184
|
+
sep1=' rdf_safe_attr_reader_many :'
|
185
|
+
cmd2=''
|
186
|
+
sep2=' rdf_safe_attr_reader_one :'
|
187
|
+
|
188
|
+
model.each { |tbl,prop|
|
189
|
+
next unless prop.kind_of?(Crdf_Property)
|
190
|
+
next if prop.rdfs_domain.nil?
|
191
|
+
next unless prop.rdfs_domain.include?(self)
|
192
|
+
|
193
|
+
#log.debug "res2=#{prop.uri} #{prop}"
|
194
|
+
#res.instance_variables.each { |var| log.debug " > #{var} #{res.instance_variable_get(var)}" }
|
195
|
+
if(true)
|
196
|
+
#toujours disponible
|
197
|
+
cmd1+=sep1+prop.getRubyName
|
198
|
+
sep1=', :'
|
199
|
+
end
|
200
|
+
if(false)
|
201
|
+
#TODO
|
202
|
+
cmd2+=sep2+prop.getRubyName
|
203
|
+
sep2=', :'
|
204
|
+
end
|
205
|
+
}
|
206
|
+
cmd1+="\n"
|
207
|
+
cmd2+="\n"
|
208
|
+
return cmd1+cmd2
|
209
|
+
end
|
210
|
+
|
211
|
+
# Internal use
|
212
|
+
#
|
213
|
+
# Creates a skeleton minimal ruby class for immediate use.
|
214
|
+
def createRubyClassMinimal(model)
|
215
|
+
return if @mtk_rubyClassGenerated
|
216
|
+
return if isBootstrap?
|
217
|
+
eval("class ::#{getRubyClassName} < ::Crdfs_Class\nend\n")
|
218
|
+
end
|
219
|
+
|
220
|
+
# Liste des classes dont la classe courante d�rive (directe et indirecte)
|
221
|
+
def rdfs_subClassOfRecursive(ret=Array.new)
|
222
|
+
rdfs_subClassOf.each { |sub|
|
223
|
+
next if ret.contains(sub)
|
224
|
+
ret.push(sub)
|
225
|
+
sub.rdfs_subClassOfRecursive(ret)
|
226
|
+
}
|
227
|
+
return ret
|
228
|
+
end
|
229
|
+
|
230
|
+
# Creates a ruby structure for this element.
|
231
|
+
# NOTE:
|
232
|
+
# generates ruby class named getRubyClassName
|
233
|
+
# generates ruby modules named getRubyModuleName
|
234
|
+
# multiple inheritance is handled trough multiple module inclusion.
|
235
|
+
def createRubyClass(model)
|
236
|
+
cmd=''
|
237
|
+
return cmd if @mtk_rubyClassGenerated
|
238
|
+
return cmd if isBootstrap?
|
239
|
+
@mtk_rubyClassGenerated=true
|
240
|
+
|
241
|
+
rdfs_subClassOf.each { |sub|
|
242
|
+
cmd+=sub.createRubyClass(model)
|
243
|
+
}
|
244
|
+
|
245
|
+
cmd+="module ::#{self.getRubyModuleName}\n"
|
246
|
+
cmd+=getRubyAttributeDefinition(model)
|
247
|
+
rdfs_subClassOf.each { |sub|
|
248
|
+
cmd+=' include ::' +(sub.getRubyModuleName)+"\n"
|
249
|
+
}
|
250
|
+
cmd+="end\n\n"
|
251
|
+
cmd+="class ::#{getRubyClassName} < ::Crdfs_Class\n"
|
252
|
+
cmd+=' include ' +self.getRubyModuleName+"\n"
|
253
|
+
|
254
|
+
#rdfs_subClassOfRecursive.uniq.each { |c|
|
255
|
+
# cmd+=' include ' +(c.getRubyModuleName)+'\n'
|
256
|
+
#}
|
257
|
+
cmd+="end\n\n"
|
258
|
+
|
259
|
+
#log.debug "cmd -->#---------\n#{cmd}\n#---------------"
|
260
|
+
eval(cmd)
|
261
|
+
|
262
|
+
return cmd
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
module Mrdf_Resource
|
267
|
+
# returns this object uri converted to a dot/graphviz compatible identifier.
|
268
|
+
def dotId
|
269
|
+
return rdf_uri.tr('^a-zA-Z0-9','_')
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
@@ -0,0 +1,173 @@
|
|
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
|
@@ -0,0 +1,161 @@
|
|
1
|
+
#:include: ../shared/license.rdoc
|
2
|
+
|
3
|
+
require "singleton"
|
4
|
+
|
5
|
+
class UriNamespace
|
6
|
+
include Singleton
|
7
|
+
def initialize
|
8
|
+
# Les 1er sont prioritaire pour unalias ??
|
9
|
+
@urialiases=Hash.new(nil)
|
10
|
+
@urialiases["http:\/\/uml\/2"]="uml"
|
11
|
+
#@urialiases["http:\/\/uml\/1.4"]="uml"
|
12
|
+
@urialiases["http:\/\/www.w3.org\/2000\/01\/rdf-schema"]="rdfs"
|
13
|
+
@urialiases["http:\/\/www.w3.org\/1999\/02\/22-rdf-syntax-ns"]="rdf"
|
14
|
+
@urialiases["http:\/\/protege.stanford.edu\/system"]="sys"
|
15
|
+
@urialiases["http:\/\/protege.stanford.edu\/kb"]="kb"
|
16
|
+
@urialiases["http:\/\/ft\/uml\/2"]="umlx"
|
17
|
+
@urialiases["http:\/\/kb"]="ukb"
|
18
|
+
@urialiases["http:\/\/orange-ftgroup.com\/2007\/rd\/xmda\/bpm"]="bpm"
|
19
|
+
end
|
20
|
+
|
21
|
+
# Returns unaliases uri for uri
|
22
|
+
# Used by magic draw export plugin
|
23
|
+
# NOTE:
|
24
|
+
# raises an error if alias is unknown.
|
25
|
+
# Example:
|
26
|
+
# unalias("rdf_XYZ") return @urialises("rdf")+"#"+"XYZ"
|
27
|
+
def unalias(uri)
|
28
|
+
n=uri.split('_',2)
|
29
|
+
@urialiases.each {|k,v|
|
30
|
+
next if v!=n[0]
|
31
|
+
return k+"#"+n[1]
|
32
|
+
}
|
33
|
+
# no alias is ok
|
34
|
+
return uri
|
35
|
+
#raise "unalias failed for #{uri}"
|
36
|
+
end
|
37
|
+
|
38
|
+
# Returns the alias associated to ns.
|
39
|
+
# NOTE:
|
40
|
+
# uri of the form http://orange-ft.com/[0-9]+/XyZ are aliases xyz
|
41
|
+
def getNamespaceAlias(ns)
|
42
|
+
_alias=@urialiases[ns]
|
43
|
+
return _alias if _alias
|
44
|
+
|
45
|
+
md=/^http:\/\/orange-ft.com\/[0-9]+\/([a-z0-9A-Z]+)$/.match(ns)
|
46
|
+
if md.nil?
|
47
|
+
_alias="ns_#{@urialiases.length.to_s}"
|
48
|
+
else
|
49
|
+
# La premi�re lettre doit �tre minuscule
|
50
|
+
_alias=md[1].downcase
|
51
|
+
end
|
52
|
+
addAliasHelp(_alias,ns)
|
53
|
+
addAlias(_alias,ns)
|
54
|
+
return _alias
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
def addAliasHelp(_alias,ns)
|
59
|
+
#return if context[:displayAddAliasHelp,true]
|
60
|
+
log.debug <<-ENDMSG
|
61
|
+
|
62
|
+
**********************************************************
|
63
|
+
** An unknown rdf namespace has been found and a random
|
64
|
+
** alias has been generated for it : '#{_alias}'
|
65
|
+
**
|
66
|
+
** Using a random alias is OK if you do not need to
|
67
|
+
** reference a namespace somewhere in your code.
|
68
|
+
**
|
69
|
+
** If, for example, you need to declare methods
|
70
|
+
** for elements of this namespace
|
71
|
+
** (for generating code for example),
|
72
|
+
** you will need a fix namespace alias.
|
73
|
+
**
|
74
|
+
** Run the following ruby code once in your ruby
|
75
|
+
** program to declare a new alias:
|
76
|
+
**
|
77
|
+
** YourCode.rb
|
78
|
+
** require 'ontomde-core'
|
79
|
+
** (...)
|
80
|
+
** UriNamespace.instance.addAlias('yourAlias',
|
81
|
+
** '#{ns.gsub(/\//,'\\\/')}'
|
82
|
+
** )
|
83
|
+
**
|
84
|
+
** Note: beware of \\/ ruby string escaping)
|
85
|
+
**********************************************************
|
86
|
+
ENDMSG
|
87
|
+
end
|
88
|
+
|
89
|
+
#adds an alias to the predefined list of aliases.
|
90
|
+
def addAlias(_alias,ns)
|
91
|
+
log.debug { "Creation d'un alias de namespace xmlns:"+_alias+"=\""+ns+"#\"" }
|
92
|
+
@urialiases[ns]=_alias
|
93
|
+
return nil
|
94
|
+
end
|
95
|
+
|
96
|
+
#compute aliases name for given uri
|
97
|
+
#exemple alias('http://foo#bar') --> 'ns1:bar'
|
98
|
+
#Note:
|
99
|
+
# method added for uml2_kb which stores unaliased uri in kb text field for back reference to uml model.
|
100
|
+
def urialias(uri)
|
101
|
+
a=uri.split("#",2)
|
102
|
+
return uri if a[1].nil?
|
103
|
+
ns=getNamespaceAlias(a[0])
|
104
|
+
#puts "uri=#{ns}_#{a[1]}"
|
105
|
+
return "#{ns}_#{a[1]}"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
#RDF triplet handling.
|
110
|
+
class NTriple
|
111
|
+
attr_reader :about_uri, :predicat_uri, :value_uri, :value_litteral
|
112
|
+
def valueIsReference?
|
113
|
+
end
|
114
|
+
|
115
|
+
# Initialization of internal cache (performance enchancement)
|
116
|
+
def initialize
|
117
|
+
# Le cache est remis � z�ro � chaque fichier.
|
118
|
+
# Les essais avec SID.nt montrent un gain de performance
|
119
|
+
# de 10% sur la m�thode urialias, les fichiers �tant largement disjoints.
|
120
|
+
#@@cacheUse=1
|
121
|
+
#@@cacheMiss=100
|
122
|
+
#log.debug "initialize triplet"
|
123
|
+
@uriMappingCache=Hash.new(nil)
|
124
|
+
end
|
125
|
+
|
126
|
+
# Returns an aliases uri
|
127
|
+
# uri is in ntriple format: '<http://foo#bar>'
|
128
|
+
# Optimize for ntriple file handling
|
129
|
+
def urialias(uri)
|
130
|
+
#log.debug "#{uri} ??"
|
131
|
+
#return nil if uri == nil
|
132
|
+
ret=@uriMappingCache[uri]
|
133
|
+
#log.debug "cache miss %=#{1.0*@@cacheMiss/@@cacheUse*100} cacheUse=#{@@cacheUse}"
|
134
|
+
#@@cacheUse=@@cacheUse+1
|
135
|
+
return ret unless ret.nil?
|
136
|
+
#log.debug "cache miss"
|
137
|
+
#@@cacheMiss=@@cacheMiss+1
|
138
|
+
@uriMappingCache[uri]=ret=compute_urialias(uri)
|
139
|
+
#log.debug "#{uri} -> #{ret}"
|
140
|
+
return ret
|
141
|
+
end
|
142
|
+
|
143
|
+
# Internal use
|
144
|
+
def compute_urialias(uri)
|
145
|
+
#renvoi une uri apres avoir remplacer le chemin par son alias
|
146
|
+
raise Warning.new,"Bad NT URI (#{uri})" if uri.nil? || (uri[0] != 60)
|
147
|
+
#uri=uri[1,uri.length-2]
|
148
|
+
#log.debug "uri[0,1] -> '#{uri[0,1]}'"
|
149
|
+
uri=uri[1,uri.length].split(">",2)[0]
|
150
|
+
#log.debug "uri-->#{uri}"
|
151
|
+
return ::UriNamespace.instance.urialias(uri)
|
152
|
+
|
153
|
+
#a=uri.split("#",2)
|
154
|
+
#return uri if a[1].nil?
|
155
|
+
#r=::UriNamespace.instance.getNamespaceAlias(a[0])
|
156
|
+
#log.debug "urialias="+r+"_"+a[1]
|
157
|
+
#return r+"_"+a[1]
|
158
|
+
#return "#{r}_#{a[1]}"
|
159
|
+
end
|
160
|
+
|
161
|
+
end
|