10
10
import numpy as np
11
11
import pyparsing
12
12
import rdflib
13
+ import rdflib .collection
13
14
import requests
14
15
import six
15
16
@@ -524,10 +525,12 @@ def viewgraph(self):
524
525
def rdfnode (self , graph ):
525
526
selfnode = rdflib .URIRef (self .identity )
526
527
for attr in self .attrs :
528
+ list_items = []
527
529
objs = self .attrs [attr ]
528
530
if (isinstance (objs , np .ndarray )):
529
531
#try to convert np.ndarray to a list
530
532
objs = objs .tolist ()
533
+
531
534
if not (isinstance (objs , set ) or isinstance (objs , list )):
532
535
objs = set ([objs ])
533
536
for obj in objs :
@@ -546,16 +549,24 @@ def rdfnode(self, graph):
546
549
else :
547
550
rdfobj = rdflib .Literal (rdfobj )
548
551
rdfpred = rdflib .URIRef (rdfpred )
549
- try :
550
- graph .add ((selfnode , rdfpred , rdfobj ))
551
-
552
- except AssertionError :
553
-
554
- graph .add ((selfnode , rdfpred , rdfobj ))
552
+ if isinstance (objs , set ):
553
+ try :
554
+ graph .add ((selfnode , rdfpred , rdfobj ))
555
+
556
+ except AssertionError :
557
+ pass
558
+ #graph.add((selfnode, rdfpred, rdfobj))
559
+ elif isinstance (objs , list ):
560
+ list_items .append (rdfobj )
555
561
if isinstance (obj , Subject ):
556
562
obj_ref = rdflib .URIRef (obj .identity )
557
563
if (obj_ref , None , None ) not in graph :
558
564
graph = obj .rdfnode (graph )
565
+ if list_items :
566
+ list_name = rdflib .BNode ()
567
+ col = rdflib .collection .Collection (graph , list_name , list_items )
568
+
569
+ graph .add ((selfnode , rdfpred , list_name ))
559
570
560
571
return graph
561
572
@@ -887,10 +898,18 @@ def load_netcdf(afilepath, baseuri=None, alias_dict=None, cache=None):
887
898
'filter(?rtype = owl:Class) '
888
899
'}' )
889
900
901
+ qstr = ('prefix bald: <http://binary-array-ld.net/latest/> '
902
+ 'prefix skos: <http://www.w3.org/2004/02/skos/core#> '
903
+ 'prefix owl: <http://www.w3.org/2002/07/owl#> '
904
+ 'select ?s '
905
+ 'where { '
906
+ ' ?s rdfs:range ?type . '
907
+ 'filter(?type in (rdfs:Literal, skos:Concept)) '
908
+ '}' )
909
+
890
910
refs = reference_graph .query (qstr )
891
911
892
- ref_prefs = [str (ref [0 ]) for ref in list (refs )]
893
-
912
+ non_ref_prefs = [str (ref [0 ]) for ref in list (refs )]
894
913
895
914
# cycle again and find references
896
915
for name in fhandle .variables :
@@ -906,30 +925,29 @@ def load_netcdf(afilepath, baseuri=None, alias_dict=None, cache=None):
906
925
907
926
# for sattr in sattrs:
908
927
for sattr in (sattr for sattr in sattrs if
909
- root_container .unpack_predicate (sattr ) in ref_prefs ):
910
- # if sattr == 'coordinates':
911
- # import pdb; pdb.set_trace()
928
+ root_container .unpack_predicate (sattr ) not in non_ref_prefs ):
912
929
913
930
if (isinstance (sattrs [sattr ], six .string_types ) and
914
931
file_variables .get (sattrs [sattr ])):
915
932
# next: remove all use of set, everything is dict or orderedDict
916
933
var .attrs [sattr ] = set ((file_variables .get (sattrs [sattr ]),))
917
934
elif isinstance (sattrs [sattr ], six .string_types ):
918
- potrefs_list = sattrs [sattr ].split (',' )
919
- potrefs_set = sattrs [sattr ].split (' ' )
920
- if len (potrefs_list ) > 1 :
921
- refs = np .array ([file_variables .get (pref ) is not None
922
- for pref in potrefs_list ])
923
- if np .all (refs ):
924
- var .attrs [sattr ] = [file_variables .get (pref )
925
- for pref in potrefs_list ]
926
-
927
- elif len (potrefs_set ) > 1 :
928
- refs = np .array ([file_variables .get (pref ) is not None
929
- for pref in potrefs_set ])
930
- if np .all (refs ):
931
- var .attrs [sattr ] = set ([file_variables .get (pref )
932
- for pref in potrefs_set ])
935
+ if sattrs [sattr ].startswith ('(' ) and sattrs [sattr ].endswith (')' ):
936
+ potrefs_list = sattrs [sattr ].lstrip ('( ' ).rstrip (' )' ).split (' ' )
937
+ if len (potrefs_list ) > 1 :
938
+ refs = np .array ([file_variables .get (pref ) is not None
939
+ for pref in potrefs_list ])
940
+ if np .all (refs ):
941
+ var .attrs [sattr ] = [file_variables .get (pref )
942
+ for pref in potrefs_list ]
943
+ else :
944
+ potrefs_set = sattrs [sattr ].split (' ' )
945
+ if len (potrefs_set ) > 1 :
946
+ refs = np .array ([file_variables .get (pref ) is not None
947
+ for pref in potrefs_set ])
948
+ if np .all (refs ):
949
+ var .attrs [sattr ] = set ([file_variables .get (pref )
950
+ for pref in potrefs_set ])
933
951
934
952
# coordinate variables are bald__references except for
935
953
# variables that already declare themselves as bald__Reference
0 commit comments