Skip to content

Commit bbb2f03

Browse files
committed
identity_pref and baseuri
1 parent 3a5cd45 commit bbb2f03

File tree

4 files changed

+346
-338
lines changed

4 files changed

+346
-338
lines changed

lib/bald/__init__.py

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ class Resource(object):
283283
_rdftype = 'bald__Resource'
284284
# def __init__(self, baseuri, relative_id, attrs=None, prefixes=None,
285285
# 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,
287287
aliases=None, alias_graph=None, file_resource=False, file_locator=None):
288288

289289
"""
@@ -292,6 +292,7 @@ def __init__(self, baseuri, relative_id, attrs=None, prefixes=None,
292292
attrs: an dictionary of key value pair attributes
293293
"""
294294
self.baseuri = baseuri
295+
self.identity_pref = identity_pref
295296
self.file_locator = file_locator
296297
self.is_file = file_resource
297298
self.relative_id = relative_id
@@ -322,9 +323,9 @@ def identity(self):
322323
if self.relative_id is None:
323324
result = None
324325
elif self.relative_id:
325-
result = self.baseuri + self.relative_id
326+
result = self.identity_pref + self.relative_id
326327
else:
327-
result = self.baseuri
328+
result = self.identity_pref
328329
return result
329330
# return '/'.join([self.baseuri, self.relative_id])
330331

@@ -335,7 +336,7 @@ def __repr__(self):
335336
return str(self)
336337

337338
def __setattr__(self, attr, value):
338-
reserved_attrs = ['baseuri', 'relative_id', 'prefixes', '_prefixes',
339+
reserved_attrs = ['baseuri', 'identity_pref', 'relative_id', 'prefixes', '_prefixes',
339340
'_prefix_suffix', '_http_uri_prefix', '_http_uri',
340341
'aliases', 'alias_graph', 'attrs', '_rdftype', 'file_locator',
341342
'is_file']
@@ -402,8 +403,6 @@ def unpack_predicate(self, astring):
402403
return result
403404

404405
def unpack_rdfobject(self, astring, predicate):
405-
# if astring == 'x_wind':
406-
# import pdb; pdb.set_trace()
407406
result = astring
408407
if isinstance(astring, six.string_types) and self._prefix_suffix.match(astring):
409408
prefix, suffix = self._prefix_suffix.match(astring).groups()
@@ -581,6 +580,15 @@ def rdfnode(self, graph):
581580
selfnode = rdflib.BNode()
582581
else:
583582
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+
584592
for attr in self.attrs:
585593
list_items = []
586594
objs = self.attrs[attr]
@@ -904,32 +912,32 @@ def _prefixes_and_aliases(fhandle, identity, alias_dict, cache):
904912
return prefixes, aliases, aliasgraph, prefix_var_name
905913

906914

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):
908916
file_variables = file_variables.copy()
909917

910918
gattrs = {}
911919
for k in agroup.ncattrs():
912920
gattrs[k] = getattr(agroup, k)
913921

914-
gidentity = baseuri + gk + '/'
922+
gidentity = identity_pref + gk + '/'
915923

916-
gcontainer = Container(gidentity, '', gattrs, prefixes=prefixes,
924+
gcontainer = Container(baseuri, gidentity, '', gattrs, prefixes=prefixes,
917925
aliases=aliases, alias_graph=aliasgraph)
918926

919927
gcontainer.attrs['bald__contains'] = set()
920928

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)
922930
if 'bald__contains' not in root_container.attrs:
923931
root_container.attrs['bald__contains'] = set()
924932
root_container.attrs['bald__contains'].add(gcontainer)
925933
for gk in agroup.groups:
926934

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,
928936
prefixes, prefix_group_name, aliases, aliasgraph, cache)
929937

930938

931939

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,
933941
prefix_var_name, aliases, aliasgraph, cache):
934942

935943
for name in agroup.variables:
@@ -1021,10 +1029,10 @@ def _load_netcdf_group_vars(fhandle, agroup, root_container, baseuri, attrs, fil
10211029

10221030
if agroup.variables[name].shape:
10231031
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,
10251033
aliases=aliases, alias_graph=aliasgraph)
10261034
else:
1027-
var = Resource(baseuri, name, sattrs, prefixes=prefixes,
1035+
var = Resource(baseuri, identity_pref, name, sattrs, prefixes=prefixes,
10281036
aliases=aliases, alias_graph=aliasgraph)
10291037
root_container.attrs['bald__contains'].add(var)
10301038

@@ -1114,14 +1122,13 @@ def _load_netcdf_group_vars(fhandle, agroup, root_container, baseuri, attrs, fil
11141122
for dim in agroup.variables[name].dimensions:
11151123
if file_variables.get(dim) and name != dim:
11161124
_make_ref_entities(var, fhandle, agroup, dim, name,
1117-
baseuri, root_container,
1125+
baseuri, identity_pref, root_container,
11181126
file_variables, prefixes,
11191127
aliases, aliasgraph)
11201128
# import pdb; pdb.set_trace()
11211129
# for sattr in sattrs:
11221130
for sattr in (sattr for sattr in sattrs if
11231131
root_container.unpack_predicate(sattr) in ref_prefs):
1124-
11251132
if isinstance(sattrs[sattr], six.string_types):
11261133

11271134
if sattrs[sattr].startswith('(') and sattrs[sattr].endswith(')'):
@@ -1133,7 +1140,7 @@ def _load_netcdf_group_vars(fhandle, agroup, root_container, baseuri, attrs, fil
11331140
for pref in potrefs_list]
11341141
for pref in potrefs_list:
11351142
_make_ref_entities(var, fhandle, agroup,
1136-
pref, name, baseuri,
1143+
pref, name, baseuri, identity_pref,
11371144
root_container,
11381145
file_variables, prefixes,
11391146
aliases, aliasgraph)
@@ -1149,7 +1156,7 @@ def _load_netcdf_group_vars(fhandle, agroup, root_container, baseuri, attrs, fil
11491156
# coordinate variables already handled
11501157
if pref not in agroup.variables[name].dimensions:
11511158
_make_ref_entities(var, fhandle, agroup,
1152-
pref, name, baseuri,
1159+
pref, name, baseuri, identity_pref,
11531160
root_container,
11541161
file_variables, prefixes,
11551162
aliases, aliasgraph)
@@ -1182,28 +1189,28 @@ def load_netcdf(afilepath, baseuri=None, alias_dict=None, cache=None, file_locat
11821189
for k in fhandle.ncattrs():
11831190
attrs[k] = getattr(fhandle, k)
11841191

1185-
root_container = Container(baseuri, '', attrs, prefixes=prefixes,
1192+
root_container = Container(baseuri, baseuri, '', attrs, prefixes=prefixes,
11861193
aliases=aliases, alias_graph=aliasgraph,
11871194
file_resource=True, file_locator=file_locator)
11881195

11891196
root_container.attrs['bald__contains'] = set()
11901197

11911198
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,
11931200
prefix_group_name, aliases, aliasgraph, cache)
11941201

11951202
for gk in fhandle.groups:
11961203
if gk == prefix_group_name:
11971204
continue
11981205

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,
12001207
prefixes, prefix_group_name, aliases, aliasgraph, cache)
12011208
# _create_references(root_container,
12021209
# prefixes, prefix_group_name, aliases, aliasgraph, cache)
12031210

12041211
return root_container
12051212

1206-
def _make_ref_entities(var, fhandle, variables, pref, name, baseuri,
1213+
def _make_ref_entities(var, fhandle, variables, pref, name, baseuri, identity_pref,
12071214
root_container, file_variables,
12081215
prefixes, aliases, aliasgraph):
12091216
namevar = None
@@ -1256,7 +1263,7 @@ def _make_ref_entities(var, fhandle, variables, pref, name, baseuri,
12561263
if targetReshape != list(prefvar.shape):
12571264
rattrs['bald__targetReshape'] = targetReshape
12581265
rattrs['bald__target'] = set((file_variables.get(pref),))
1259-
ref_node = Reference(baseuri, identity, rattrs,
1266+
ref_node = Reference(baseuri, identity_pref, identity, rattrs,
12601267
prefixes=prefixes,
12611268
aliases=aliases,
12621269
alias_graph=aliasgraph)
@@ -1366,7 +1373,7 @@ def _hdf_group(fhandle, identity='root', baseuri=None, prefixes=None,
13661373
aliases = careful_update(aliases, dict(fhandle[alias_group].attrs))
13671374
attrs = dict(fhandle.attrs)
13681375
aliasgraph = rdflib.Graph()
1369-
root_container = Container(baseuri, identity, attrs, prefixes=prefixes,
1376+
root_container = Container(baseuri, baseuri, identity, attrs, prefixes=prefixes,
13701377
aliases=aliases, alias_graph=aliasgraph)
13711378

13721379
root_container.attrs['bald__contains'] = set()
@@ -1386,7 +1393,7 @@ def _hdf_group(fhandle, identity='root', baseuri=None, prefixes=None,
13861393
elif isinstance(dataset, h5py._hl.dataset.Dataset):
13871394
sattrs = dict(dataset.attrs)
13881395
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)
13901397
root_container.attrs['bald__contains'].add(dset)
13911398
file_variables[dataset.name] = dset
13921399
return root_container, file_variables

lib/bald/tests/integration/CDL/group_array_geo.cdl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,19 @@ variables:
2727

2828
int theta_points ;
2929
theta_points:georef__wkt_crs = "http://www.epsg-registry.org/export.htm?wkt=urn:ogc:def:crs:EPSG::4326" ;
30-
theta_points:georef__coord_tuple = "(y_t, x_t)" ;
30+
theta_points:georef__coord_tuple = "(y_t x_t)" ;
3131
theta_points:rdfs__label = "Theta Points" ;
3232
theta_points:dct__description = "Arakawa C Theta points defined with respect to a 2D WGS84 geodetic surface." ;
3333

3434
int u_points ;
3535
u_points:cf__wkt_crs = "http://www.epsg-registry.org/export.htm?wkt=urn:ogc:def:crs:EPSG::4326" ;
36-
u_points:georef__coord_tuple = "(y_t, x_q)" ;
36+
u_points:georef__coord_tuple = "(y_t x_q)" ;
3737
u_points:rdfs__label = "U Points" ;
3838
u_points:dct__description = "Arakawa C U points defined with respect to a 2D WGS84 geodetic surface." ;
3939

4040
int v_points ;
4141
v_points:georef__wkt_crs = "http://www.epsg-registry.org/export.htm?wkt=urn:ogc:def:crs:EPSG::4326" ;
42-
v_points:georef__coord_tuple = "(y_q, x_t)" ;
42+
v_points:georef__coord_tuple = "(y_q x_t)" ;
4343
v_points:rdfs__label = "V Points" ;
4444
v_points:dct__description = "Arakawa C V points defined with respect to a 2D WGS84 geodetic surface." ;
4545

@@ -106,7 +106,7 @@ variables:
106106
float air_pressure(time, y_t, x_t) ;
107107
air_pressure:cf__standard_name = "air_pressure" ;
108108
air_pressure:nc__units = "Pa" ;
109-
air_pressure:geo__domain = "theta_points" ;
109+
air_pressure:georef__domain = "theta_points" ;
110110

111111
}
112112

0 commit comments

Comments
 (0)