@@ -370,23 +370,30 @@ def _write_metadata(self, metadata):
370
370
else :
371
371
metadata ['Date' ] = datetime .datetime .today ().isoformat ()
372
372
373
- mid = writer .start ('metadata' )
374
- writer .start ('rdf:RDF' , attrib = {
373
+ mid = None
374
+ def ensure_metadata (mid ):
375
+ if mid is not None :
376
+ return mid
377
+ mid = writer .start ('metadata' )
378
+ writer .start ('rdf:RDF' , attrib = {
375
379
'xmlns:dc' : "http://purl.org/dc/elements/1.1/" ,
376
380
'xmlns:cc' : "http://creativecommons.org/ns#" ,
377
381
'xmlns:rdf' : "http://www.w3.org/1999/02/22-rdf-syntax-ns#" ,
378
382
})
379
- writer .start ('cc:Work' )
383
+ writer .start ('cc:Work' )
384
+ return mid
380
385
381
386
uri = metadata .pop ('Type' , None )
382
387
if uri is not None :
388
+ mid = ensure_metadata (mid )
383
389
writer .element ('dc:type' , attrib = {'rdf:resource' : uri })
384
390
385
391
# Single value only.
386
392
for key in ['title' , 'coverage' , 'date' , 'description' , 'format' ,
387
393
'identifier' , 'language' , 'relation' , 'source' ]:
388
394
info = metadata .pop (key .title (), None )
389
395
if info is not None :
396
+ mid = ensure_metadata (mid )
390
397
writer .element (f'dc:{ key } ' , text = info )
391
398
392
399
# Multiple Agent values.
@@ -398,6 +405,7 @@ def _write_metadata(self, metadata):
398
405
if isinstance (agents , str ):
399
406
agents = [agents ]
400
407
408
+ mid = ensure_metadata (mid )
401
409
writer .start (f'dc:{ key } ' )
402
410
for agent in agents :
403
411
writer .start ('cc:Agent' )
@@ -411,14 +419,16 @@ def _write_metadata(self, metadata):
411
419
if isinstance (keywords , str ):
412
420
keywords = [keywords ]
413
421
422
+ mid = ensure_metadata (mid )
414
423
writer .start ('dc:subject' )
415
424
writer .start ('rdf:Bag' )
416
425
for keyword in keywords :
417
426
writer .element ('rdf:li' , text = keyword )
418
427
writer .end ('rdf:Bag' )
419
428
writer .end ('dc:subject' )
420
429
421
- writer .close (mid )
430
+ if mid is not None :
431
+ writer .close (mid )
422
432
423
433
if metadata :
424
434
raise ValueError ('Unknown metadata key(s) passed to SVG writer: ' +
0 commit comments