* src/WriteXML.py (write_xml_data): Use ISO date in the created

attribute; (get_iso_date): Return empty string on empty date;
(write_date): Write quality attributes, if any.
* src/ReadXML.py (start_daterange,start_dateval): Parse quality
attributes.


svn: r5315
This commit is contained in:
Alex Roitman 2005-10-14 00:25:22 +00:00
parent 1edd0bf53d
commit 29022a6f1e
5 changed files with 75 additions and 20 deletions

View File

@ -2,6 +2,11 @@
* example/gramps/data.gramps: Update example data to conform with
the format changes and the DTD.
* doc/grampsxml.dtd, doc/grampsxml.rng: Update.
* src/WriteXML.py (write_xml_data): Use ISO date in the created
attribute; (get_iso_date): Return empty string on empty date;
(write_date): Write quality attributes, if any.
* src/ReadXML.py (start_daterange,start_dateval): Parse quality
attributes.
2005-10-13 Martin Hawlisch <Martin.Hawlisch@gmx.de>
* src/plugins/TestcaseGenerator.py: Randomize more; Add LDS events

View File

@ -256,14 +256,16 @@ SHARED ELEMENTS
<!ATTLIST daterange
start CDATA #REQUIRED
stop CDATA #REQUIRED
quality (estimated|calculated) #IMPLIED
cformat CDATA #IMPLIED
>
<!ELEMENT dateval EMPTY>
<!ATTLIST dateval
val CDATA #REQUIRED
type (before|after|about) #IMPLIED
cformat CDATA #IMPLIED
val CDATA #REQUIRED
type (before|after|about) #IMPLIED
quality (estimated|calculated) #IMPLIED
cformat CDATA #IMPLIED
>
<!ELEMENT datestr EMPTY>

View File

@ -38,7 +38,7 @@
<element name="header">
<element name="created">
<attribute name="date"><text/></attribute>
<attribute name="date"><data type="date"/></attribute>
<attribute name="version"><text/></attribute>
</element>
<optional><element name="researcher">
@ -229,6 +229,10 @@
<element name="daterange">
<attribute name="start"><text/></attribute>
<attribute name="stop"><text/></attribute>
<optional><attribute name="quality"><choice>
<value>estimated</value>
<value>calculated</value>
</choice></attribute></optional>
<optional><attribute name="cformat"><text/></attribute></optional>
</element>
<element name="dateval">
@ -239,6 +243,10 @@
<value>after</value>
<value>about</value>
</choice></attribute></optional>
<optional><attribute name="quality"><choice>
<value>estimated</value>
<value>calculated</value>
</choice></attribute></optional>
</element>
<element name="datestr">
<attribute name="val"><text/></attribute>

View File

@ -990,7 +990,18 @@ class GrampsParser:
else:
cal = Date.CAL_GREGORIAN
dv.set(Date.QUAL_NONE,Date.MOD_RANGE,cal,(d,m,y,False,rd,rm,ry,False))
if attrs.has_key('quality'):
val = attrs['quality']
if val == 'estimated':
qual = Date.QUAL_ESTIMATED
elif val == 'calculated':
qual = Date.QUAL_CALCULATED
else:
qual = Date.QUAL_NONE
else:
qual = Date.QUAL_NONE
dv.set(qual,Date.MOD_RANGE,cal,(d,m,y,False,rd,rm,ry,False))
def start_dateval(self,attrs):
if self.source_ref:
@ -1042,8 +1053,19 @@ class GrampsParser:
mod = Date.MOD_BEFORE
else:
mod = Date.MOD_NONE
if attrs.has_key('quality'):
val = attrs['quality']
if val == 'estimated':
qual = Date.QUAL_ESTIMATED
elif val == 'calculated':
qual = Date.QUAL_CALCULATED
else:
qual = Date.QUAL_NONE
else:
qual = Date.QUAL_NONE
dv.set(Date.QUAL_NONE,mod,cal,(d,m,y,False))
dv.set(qual,mod,cal,(d,m,y,False))
def start_datestr(self,attrs):
if self.source_ref:

View File

@ -197,7 +197,7 @@ class XmlWriter:
def write_xml_data(self):
date = time.ctime(time.time()).split()
date = time.localtime(time.time())
owner = self.db.get_researcher()
person_len = self.db.get_number_of_people()
family_len = len(self.db.get_family_handles())
@ -212,11 +212,10 @@ class XmlWriter:
'PUBLIC "-//GRAMPS//DTD GRAMPS XML V%s//EN"\n'
'"http://gramps-project.org/xml/%s/grampsxml.dtd">\n'
% (_xml_version,_xml_version))
self.g.write("<database xmlns=\"http://gramps-project.org/\">\n")
self.g.write(" <header>\n")
self.g.write(" <created date=\"%s %s %s\"" % \
(date[2],date[1].upper(),date[4]))
self.g.write(' <created date="%04d-%02d-%02d\"' %
(date[0],date[1],date[2]) )
self.g.write(" version=\"" + const.version + "\"")
self.g.write("/>\n")
self.g.write(" <researcher>\n")
@ -614,7 +613,12 @@ class XmlWriter:
d = ''
else:
d = "-%02d" % date[0]
return "%s%s%s" % (y,m,d)
ret = "%s%s%s" % (y,m,d)
# If the result does not contain anything beyond dashes
# and question marks then it's as good as empty
if ret.replace('-','').replace('?','') == '':
ret = ''
return ret
def write_date(self,date,indent=1):
sp = ' '*indent
@ -625,27 +629,41 @@ class XmlWriter:
else:
calstr = ''
qual = date.get_quality()
if qual == Date.QUAL_ESTIMATED:
qual_str = ' quality="estimated"'
elif qual == Date.QUAL_CALCULATED:
qual_str = ' quality="calculated"'
else:
qual_str = ""
mode = date.get_modifier()
if date.is_compound():
d1 = self.get_iso_date(date.get_start_date())
d2 = self.get_iso_date(date.get_stop_date())
self.g.write('%s<daterange start="%s" stop="%s"%s/>\n' % (sp,d1,d2,calstr))
if d1 != "" or d2 != "":
self.g.write('%s<daterange start="%s" stop="%s"%s%s/>\n'
% (sp,d1,d2,qual_str,calstr))
elif mode != Date.MOD_TEXTONLY:
dstr = self.get_iso_date(date.get_start_date())
date_str = self.get_iso_date(date.get_start_date())
if date_str == "":
return
if mode == Date.MOD_BEFORE:
pref = ' type="before"'
mode_str = ' type="before"'
elif mode == Date.MOD_AFTER:
pref = ' type="after"'
mode_str = ' type="after"'
elif mode == Date.MOD_ABOUT:
pref = ' type="about"'
mode_str = ' type="about"'
else:
pref = ""
self.g.write('%s<dateval val="%s"%s%s/>\n' % (sp,dstr,pref,calstr))
mode_str = ""
self.g.write('%s<dateval val="%s"%s%s%s/>\n'
% (sp,date_str,mode_str,qual_str,calstr))
else:
self.g.write('%s<datestr val="%s"/>\n' %(sp,self.fix(date.get_text())))
self.g.write('%s<datestr val="%s"/>\n'
%(sp,self.fix(date.get_text())))
def write_force_line(self,label,value,indent=1):
if value != None: