@@ -123,11 +123,27 @@ def save_element(self, e, node=None):
123123 elif isinstance (fmt , Property .__class__ ) and \
124124 k == 'value' and len (getattr (e , k )) > 0 :
125125 values = getattr (e , k )
126- bag = URIRef (odmlns + str (uuid .uuid4 ()))
127- self .g .add ((bag , RDF .type , RDF .Bag ))
128- self .g .add ((curr_node , fmt .rdf_map (k ), bag ))
126+ seq = URIRef (odmlns + str (uuid .uuid4 ()))
127+ self .g .add ((seq , RDF .type , RDF .Seq ))
128+ self .g .add ((curr_node , fmt .rdf_map (k ), seq ))
129+ # rdflib so far does not respect RDF:li item order
130+ # in RDF:Seq on loading so we have to use custom
131+ # numbered Node elements for now. Once rdflib upgrades
132+ # this should be reversed to RDF:li again!
133+ # see https://github.com/RDFLib/rdflib/issues/280
134+ # -- keep until supported
135+ # bag = URIRef(odmlns + str(uuid.uuid4()))
136+ # self.g.add((bag, RDF.type, RDF.Bag))
137+ # self.g.add((curr_node, fmt.rdf_map(k), bag))
138+ # for v in values:
139+ # self.g.add((bag, RDF.li, Literal(v)))
140+
141+ counter = 1
129142 for v in values :
130- self .g .add ((bag , RDF .li , Literal (v )))
143+ pred = "%s_%s" % (str (RDF ), counter )
144+ self .g .add ((seq , URIRef (pred ), Literal (v )))
145+ counter = counter + 1
146+
131147 # adding entities' properties
132148 else :
133149 val = getattr (e , k )
0 commit comments