Andrii,

I've made a fix.  It's attached to a separate email.  I've done some
light testing and this change seems to work as I expect.  But, maybe
what I expect is wrong.

However, before using that new version, please read my comments
below.  I'm wondering whether I've made the correct fix.  See
below.

Following your hint, I have added a new command line option to
generateDS.py: --export-when-default

When you use this option, generateDS.py will now generate code that
exports children, even when a child's value is equal to the default
value specified in the XML schema.

Am I correct that we should apply this new behavior to child
elements, but *not* to attributes?  I did a little reading on this
and it appears that an attribute with a default value is optional
but that a child element with a default value and minOccurs greater
than zero is not.

If the above is correct, perhaps instead of a new command line
option, this new behavior (not omitting the child element) should
always be done, or at least it should be the default and the new
flag should generate code that has the old behavior (exports the
child element when the value equals the default).

So, here is an alternative:

For child elements defined with a default value, generate code that
(a) always exports the child element if it's minOccurs is greater
than zero and (b) if its minOccurs is zero (it is optional) exports
it only if its value is different from the default.

If we do this, then we can get rid of the --export-when-default
option in the patched version I'm sending.

What do you think?

Dave

On Tue, Nov 28, 2017 at 11:28:39AM +0000, Andrii Iudin wrote:
> Dear Dave,
> 
> We are having a problem with exporting an element with a set default value.
> The element in question is
> <xs:element name="framesPerImage" type="xs:integer" default="1">
>     <xs:annotation>
>         <xs:documentation>Normally = 1.
> Relevant for multi-frame direct electron detectors.</xs:documentation>
>     </xs:annotation>
> </xs:element>
> 
> It seems to be exported only when its value is not equal to the default one
> if self.framesPerImage != 1:
>     showIndent(outfile, level, pretty_print)
> outfile.write('<%sframesPerImage>%s</%sframesPerImage>%s' % (namespace_,
> self.gds_format_integer(self.framesPerImage, input_name='framesPerImage'),
> namespace_, eol_))
> 
> As a result, xmllint fails to validate the exported XML since it is missing
> framesPerImage element.
> 
> Please could you tell if there is a switch that could force exports of
> elements if they have a default value? The relevant code seems to be
> starting at line 2080
>         if default is None:
>             wrt('%s        if self.%s is not None:\n' % (fill, mappedName,
> ))
>         else:
>             wrt('%s        if self.%s != %s:\n' % (
>                 fill, mappedName, default, ))
> 
> Many thanks and best regards,
> Andrii
> 
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> generateds-users mailing list
> generateds-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/generateds-users

-- 

Dave Kuhlman
http://www.davekuhlman.org

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
generateds-users mailing list
generateds-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/generateds-users

Reply via email to