return ncname-compliant bnode ids · gnowsis/rdflib@4072188 (original) (raw)
`@@ -192,7 +192,7 @@ def _unique_id():
`
192
192
`#
`
193
193
`# BNode identifiers must be valid NCNames" _:[A-Za-z][A-Za-z0-9]*
`
194
194
`# http://www.w3.org/TR/2004/REC-rdf-testcases-20040210/#nodeID
`
195
``
`-
return "_"
`
``
195
`+
return "A" # ensure that id starts with a letter
`
196
196
``
197
197
`# Adapted from http://icodesnip.com/snippet/python/simple-universally-unique-id-uuid-or-guid
`
198
198
`def bnode_uuid():
`
`@@ -217,15 +217,22 @@ def bnode_uuid():
`
217
217
`a = random.random()*100000000000000000L
`
218
218
`data = str(t) + ' ' + str(r) + ' ' + str(a)
`
219
219
`data = md5(data.encode('ascii')).hexdigest()
`
220
``
`-
return '-'.join(
`
221
``
`-
[data[:8], data[8:12], data[12:16], data[16:20], data[20:]])
`
``
220
`+
return ''.join([data[:8], data[8:12], data[12:16], data[16:20], data[20:]])
`
``
221
+
``
222
+
``
223
`+
def uuid4_ncname():
`
``
224
`+
"""
`
``
225
`+
Generates UUID4-based but ncname-compliant identifiers.
`
``
226
`+
"""
`
``
227
`+
return unicode(uuid4()).replace('-', '')
`
``
228
+
222
229
``
223
230
`def _serial_number_generator():
`
224
231
`import sys
`
225
232
`if sys.version_info[:2] < (2, 5):
`
226
233
`_generator = bnode_uuid
`
227
234
`else:
`
228
``
`-
_generator = uuid4
`
``
235
`+
_generator = uuid4_ncname
`
229
236
`while 1:
`
230
237
`yield _generator()
`
231
238
``