@@ -283,7 +283,7 @@ class Resource(object):
283
283
_rdftype = 'bald__Resource'
284
284
# def __init__(self, baseuri, relative_id, attrs=None, prefixes=None,
285
285
# aliases=None, alias_graph=None):
286
- def __init__ (self , baseuri , relative_id , attrs = None , prefixes = None ,
286
+ def __init__ (self , baseuri , identity_pref , relative_id , attrs = None , prefixes = None ,
287
287
aliases = None , alias_graph = None , file_resource = False , file_locator = None ):
288
288
289
289
"""
@@ -292,6 +292,7 @@ def __init__(self, baseuri, relative_id, attrs=None, prefixes=None,
292
292
attrs: an dictionary of key value pair attributes
293
293
"""
294
294
self .baseuri = baseuri
295
+ self .identity_pref = identity_pref
295
296
self .file_locator = file_locator
296
297
self .is_file = file_resource
297
298
self .relative_id = relative_id
@@ -322,9 +323,9 @@ def identity(self):
322
323
if self .relative_id is None :
323
324
result = None
324
325
elif self .relative_id :
325
- result = self .baseuri + self .relative_id
326
+ result = self .identity_pref + self .relative_id
326
327
else :
327
- result = self .baseuri
328
+ result = self .identity_pref
328
329
return result
329
330
# return '/'.join([self.baseuri, self.relative_id])
330
331
@@ -335,7 +336,7 @@ def __repr__(self):
335
336
return str (self )
336
337
337
338
def __setattr__ (self , attr , value ):
338
- reserved_attrs = ['baseuri' , 'relative_id' , 'prefixes' , '_prefixes' ,
339
+ reserved_attrs = ['baseuri' , 'identity_pref' , ' relative_id' , 'prefixes' , '_prefixes' ,
339
340
'_prefix_suffix' , '_http_uri_prefix' , '_http_uri' ,
340
341
'aliases' , 'alias_graph' , 'attrs' , '_rdftype' , 'file_locator' ,
341
342
'is_file' ]
@@ -402,8 +403,6 @@ def unpack_predicate(self, astring):
402
403
return result
403
404
404
405
def unpack_rdfobject (self , astring , predicate ):
405
- # if astring == 'x_wind':
406
- # import pdb; pdb.set_trace()
407
406
result = astring
408
407
if isinstance (astring , six .string_types ) and self ._prefix_suffix .match (astring ):
409
408
prefix , suffix = self ._prefix_suffix .match (astring ).groups ()
@@ -581,6 +580,15 @@ def rdfnode(self, graph):
581
580
selfnode = rdflib .BNode ()
582
581
else :
583
582
selfnode = rdflib .URIRef (self .identity )
583
+ # if group, bind to namespace
584
+ if self .identity .endswith ('/' ):
585
+ if not (rdflib .URIRef (self .identity ) in
586
+ [n [1 ] for n in graph .namespace_manager .namespaces ()]):
587
+ this = dict (graph .namespace_manager .namespaces ())['this' ]
588
+ nkey = self .identity .replace (this , 'this__' )
589
+ nkey = nkey [:- 1 ].replace ('/' , '__' )
590
+ graph .bind (nkey , self .identity )
591
+
584
592
for attr in self .attrs :
585
593
list_items = []
586
594
objs = self .attrs [attr ]
@@ -904,32 +912,32 @@ def _prefixes_and_aliases(fhandle, identity, alias_dict, cache):
904
912
return prefixes , aliases , aliasgraph , prefix_var_name
905
913
906
914
907
- def _load_netcdf_group (fhandle , agroup , baseuri , gk , root_container , file_variables , prefixes , prefix_group_name , aliases , aliasgraph , cache ):
915
+ def _load_netcdf_group (fhandle , agroup , baseuri , identity_pref , gk , root_container , file_variables , prefixes , prefix_group_name , aliases , aliasgraph , cache ):
908
916
file_variables = file_variables .copy ()
909
917
910
918
gattrs = {}
911
919
for k in agroup .ncattrs ():
912
920
gattrs [k ] = getattr (agroup , k )
913
921
914
- gidentity = baseuri + gk + '/'
922
+ gidentity = identity_pref + gk + '/'
915
923
916
- gcontainer = Container (gidentity , '' , gattrs , prefixes = prefixes ,
924
+ gcontainer = Container (baseuri , gidentity , '' , gattrs , prefixes = prefixes ,
917
925
aliases = aliases , alias_graph = aliasgraph )
918
926
919
927
gcontainer .attrs ['bald__contains' ] = set ()
920
928
921
- _load_netcdf_group_vars (fhandle , agroup , gcontainer , gidentity , gattrs , file_variables , prefixes , prefix_group_name , aliases , aliasgraph , cache )
929
+ _load_netcdf_group_vars (fhandle , agroup , gcontainer , baseuri , gidentity , gattrs , file_variables , prefixes , prefix_group_name , aliases , aliasgraph , cache )
922
930
if 'bald__contains' not in root_container .attrs :
923
931
root_container .attrs ['bald__contains' ] = set ()
924
932
root_container .attrs ['bald__contains' ].add (gcontainer )
925
933
for gk in agroup .groups :
926
934
927
- _load_netcdf_group (fhandle , agroup .groups [gk ], baseuri , gk , gcontainer , file_variables ,
935
+ _load_netcdf_group (fhandle , agroup .groups [gk ], baseuri , gidentity , gk , gcontainer , file_variables ,
928
936
prefixes , prefix_group_name , aliases , aliasgraph , cache )
929
937
930
938
931
939
932
- def _load_netcdf_group_vars (fhandle , agroup , root_container , baseuri , attrs , file_variables , prefixes ,
940
+ def _load_netcdf_group_vars (fhandle , agroup , root_container , baseuri , identity_pref , attrs , file_variables , prefixes ,
933
941
prefix_var_name , aliases , aliasgraph , cache ):
934
942
935
943
for name in agroup .variables :
@@ -1021,10 +1029,10 @@ def _load_netcdf_group_vars(fhandle, agroup, root_container, baseuri, attrs, fil
1021
1029
1022
1030
if agroup .variables [name ].shape :
1023
1031
sattrs ['bald__shape' ] = list (agroup .variables [name ].shape )
1024
- var = Array (baseuri , name , sattrs , prefixes = prefixes ,
1032
+ var = Array (baseuri , identity_pref , name , sattrs , prefixes = prefixes ,
1025
1033
aliases = aliases , alias_graph = aliasgraph )
1026
1034
else :
1027
- var = Resource (baseuri , name , sattrs , prefixes = prefixes ,
1035
+ var = Resource (baseuri , identity_pref , name , sattrs , prefixes = prefixes ,
1028
1036
aliases = aliases , alias_graph = aliasgraph )
1029
1037
root_container .attrs ['bald__contains' ].add (var )
1030
1038
@@ -1114,14 +1122,13 @@ def _load_netcdf_group_vars(fhandle, agroup, root_container, baseuri, attrs, fil
1114
1122
for dim in agroup .variables [name ].dimensions :
1115
1123
if file_variables .get (dim ) and name != dim :
1116
1124
_make_ref_entities (var , fhandle , agroup , dim , name ,
1117
- baseuri , root_container ,
1125
+ baseuri , identity_pref , root_container ,
1118
1126
file_variables , prefixes ,
1119
1127
aliases , aliasgraph )
1120
1128
# import pdb; pdb.set_trace()
1121
1129
# for sattr in sattrs:
1122
1130
for sattr in (sattr for sattr in sattrs if
1123
1131
root_container .unpack_predicate (sattr ) in ref_prefs ):
1124
-
1125
1132
if isinstance (sattrs [sattr ], six .string_types ):
1126
1133
1127
1134
if sattrs [sattr ].startswith ('(' ) and sattrs [sattr ].endswith (')' ):
@@ -1133,7 +1140,7 @@ def _load_netcdf_group_vars(fhandle, agroup, root_container, baseuri, attrs, fil
1133
1140
for pref in potrefs_list ]
1134
1141
for pref in potrefs_list :
1135
1142
_make_ref_entities (var , fhandle , agroup ,
1136
- pref , name , baseuri ,
1143
+ pref , name , baseuri , identity_pref ,
1137
1144
root_container ,
1138
1145
file_variables , prefixes ,
1139
1146
aliases , aliasgraph )
@@ -1149,7 +1156,7 @@ def _load_netcdf_group_vars(fhandle, agroup, root_container, baseuri, attrs, fil
1149
1156
# coordinate variables already handled
1150
1157
if pref not in agroup .variables [name ].dimensions :
1151
1158
_make_ref_entities (var , fhandle , agroup ,
1152
- pref , name , baseuri ,
1159
+ pref , name , baseuri , identity_pref ,
1153
1160
root_container ,
1154
1161
file_variables , prefixes ,
1155
1162
aliases , aliasgraph )
@@ -1182,28 +1189,28 @@ def load_netcdf(afilepath, baseuri=None, alias_dict=None, cache=None, file_locat
1182
1189
for k in fhandle .ncattrs ():
1183
1190
attrs [k ] = getattr (fhandle , k )
1184
1191
1185
- root_container = Container (baseuri , '' , attrs , prefixes = prefixes ,
1192
+ root_container = Container (baseuri , baseuri , '' , attrs , prefixes = prefixes ,
1186
1193
aliases = aliases , alias_graph = aliasgraph ,
1187
1194
file_resource = True , file_locator = file_locator )
1188
1195
1189
1196
root_container .attrs ['bald__contains' ] = set ()
1190
1197
1191
1198
file_variables = {}
1192
- _load_netcdf_group_vars (fhandle , fhandle , root_container , baseuri , attrs , file_variables , prefixes ,
1199
+ _load_netcdf_group_vars (fhandle , fhandle , root_container , baseuri , baseuri , attrs , file_variables , prefixes ,
1193
1200
prefix_group_name , aliases , aliasgraph , cache )
1194
1201
1195
1202
for gk in fhandle .groups :
1196
1203
if gk == prefix_group_name :
1197
1204
continue
1198
1205
1199
- _load_netcdf_group (fhandle , fhandle .groups [gk ], baseuri , gk , root_container , file_variables ,
1206
+ _load_netcdf_group (fhandle , fhandle .groups [gk ], baseuri , identity , gk , root_container , file_variables ,
1200
1207
prefixes , prefix_group_name , aliases , aliasgraph , cache )
1201
1208
# _create_references(root_container,
1202
1209
# prefixes, prefix_group_name, aliases, aliasgraph, cache)
1203
1210
1204
1211
return root_container
1205
1212
1206
- def _make_ref_entities (var , fhandle , variables , pref , name , baseuri ,
1213
+ def _make_ref_entities (var , fhandle , variables , pref , name , baseuri , identity_pref ,
1207
1214
root_container , file_variables ,
1208
1215
prefixes , aliases , aliasgraph ):
1209
1216
namevar = None
@@ -1256,7 +1263,7 @@ def _make_ref_entities(var, fhandle, variables, pref, name, baseuri,
1256
1263
if targetReshape != list (prefvar .shape ):
1257
1264
rattrs ['bald__targetReshape' ] = targetReshape
1258
1265
rattrs ['bald__target' ] = set ((file_variables .get (pref ),))
1259
- ref_node = Reference (baseuri , identity , rattrs ,
1266
+ ref_node = Reference (baseuri , identity_pref , identity , rattrs ,
1260
1267
prefixes = prefixes ,
1261
1268
aliases = aliases ,
1262
1269
alias_graph = aliasgraph )
@@ -1366,7 +1373,7 @@ def _hdf_group(fhandle, identity='root', baseuri=None, prefixes=None,
1366
1373
aliases = careful_update (aliases , dict (fhandle [alias_group ].attrs ))
1367
1374
attrs = dict (fhandle .attrs )
1368
1375
aliasgraph = rdflib .Graph ()
1369
- root_container = Container (baseuri , identity , attrs , prefixes = prefixes ,
1376
+ root_container = Container (baseuri , baseuri , identity , attrs , prefixes = prefixes ,
1370
1377
aliases = aliases , alias_graph = aliasgraph )
1371
1378
1372
1379
root_container .attrs ['bald__contains' ] = set ()
@@ -1386,7 +1393,7 @@ def _hdf_group(fhandle, identity='root', baseuri=None, prefixes=None,
1386
1393
elif isinstance (dataset , h5py ._hl .dataset .Dataset ):
1387
1394
sattrs = dict (dataset .attrs )
1388
1395
sattrs ['bald__shape' ] = list (dataset .shape )
1389
- dset = Array (baseuri , name , sattrs , prefixes , aliases , aliasgraph )
1396
+ dset = Array (baseuri , baseuri , name , sattrs , prefixes , aliases , aliasgraph )
1390
1397
root_container .attrs ['bald__contains' ].add (dset )
1391
1398
file_variables [dataset .name ] = dset
1392
1399
return root_container , file_variables
0 commit comments