Skip to content

Commit 8543a6a

Browse files
committed
[rdfwriter] Support ordered values via Seq
1 parent eb97b7f commit 8543a6a

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

odml/tools/rdf_converter.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)