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

``