11
11
# One extension can be generated per run of the script, with the extension's name and
12
12
# destination file as parameters (see main() for syntax).
13
13
#
14
- __version__ = '2023-07-09T12:46 -03:00'
14
+ __version__ = '2023-07-09T20:21 -03:00'
15
15
16
16
import csv
17
17
import sys
18
18
import argparse
19
+ from xml .sax .saxutils import escape
19
20
20
21
class CSVtoXMLConverter :
21
22
'''
@@ -566,13 +567,17 @@ def get_xml(self, extension_name):
566
567
xml += ' xmlns:dc="http://purl.org/dc/terms/"\n '
567
568
xml += ' xsi:schemaLocation="http://rs.gbif.org/extension/ http://rs.gbif.org/schema/extension.xsd"\n '
568
569
xml += f' dc:title="{ extension .get ("title" )} "\n '
569
- xml += f' name="{ extension_name } " namespace="{ extension .get ("namespace" )} " rowType="{ extension .get ("rowType" )} "\n '
570
+ xml += f' name="{ extension_name } "\n '
571
+ xml += f' namespace="{ extension .get ("namespace" )} "\n '
572
+ xml += f' rowType="{ extension .get ("rowType" )} "\n '
570
573
xml += f' dc:issued="{ extension .get ("dc:issued" )} "\n '
571
574
subject = extension .get ("dc:subject" )
572
575
if subject is not None :
573
576
xml += f' dc:subject="{ extension .get ("dc:subject" )} "\n '
574
577
xml += f' dc:relation="{ extension .get ("dc:relation" )} "\n '
575
- xml += f' dc:description="{ extension .get ("dc:description" )} ">\n '
578
+ description = extension .get ("dc:description" )
579
+ description = escape (description , {'"' :'"' })
580
+ xml += f' dc:description="{ description } ">\n '
576
581
xml += '\n '
577
582
with open (self .csv_file_path , 'r' ) as csv_file :
578
583
reader = csv .reader (csv_file )
@@ -603,18 +608,21 @@ def get_xml(self, extension_name):
603
608
description = row_dict ["definition" ]
604
609
if row_dict .get ("comments" ) is not None and len (row_dict .get ("comments" ))> 0 :
605
610
description += f' { row_dict ["comments" ]} '
611
+ description = escape (description , {'"' :'"' })
606
612
term_xml += f'dc:description="{ description } " '
607
613
examples = row_dict .get ("examples" ) or ""
614
+ examples = escape (examples , {'"' :'"' })
608
615
term_xml += f'examples="{ examples } " '
609
616
if row_dict ["term_localName" ] in extension .get ("required" ):
610
617
term_xml += f'required="true"/>'
611
618
else :
612
619
term_xml += f'required="false"/>'
613
620
xml += f' { term_xml } \n '
614
621
for addition in extension .get ("gbif_additions" ):
622
+ addition = escape (addition ,{'"' :'"' })
615
623
xml += f' { addition } '
616
624
xml += "</extension>"
617
- return encoded_quotes ( xml )
625
+ return xml
618
626
619
627
def write_xml (self , extension_name , filename ):
620
628
'''
@@ -624,9 +632,6 @@ def write_xml(self, extension_name, filename):
624
632
with open (filename , 'w' ) as xml_file :
625
633
xml_file .write (self .get_xml (extension_name ))
626
634
627
- def encoded_quotes (s ):
628
- return s .replace ('"' , '"' )
629
-
630
635
def _getoptions ():
631
636
''' Parse command line options and return them.'''
632
637
parser = argparse .ArgumentParser ()
0 commit comments