<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.0.6556.0">
<TITLE>RE: [xsd-users] Default values for optional elements.</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">Boris,</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">T</FONT></SPAN><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">hat&#8217;s</FONT></SPAN><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New"> great news, thanks.</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">A further thought</FONT></SPAN><SPAN LANG="en-gb"> <FONT SIZE=2 FACE="Courier New">I</FONT></SPAN><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New"> had was, having generated these default values, to</FONT></SPAN><SPAN LANG="en-gb"> <FONT SIZE=2 FACE="Courier New">exclude these elements when</FONT></SPAN><SPAN LANG="en-gb"> <FONT SIZE=2 FACE="Courier New">serializing</FONT></SPAN><SPAN LANG="en-gb"> <FONT SIZE=2 FACE="Courier New">the data</FONT></SPAN><SPAN LANG="en-gb"> <FONT SIZE=2 FACE="Courier New">to file again</FONT></SPAN><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">. i.e. an xml file containing unspecified</FONT></SPAN><SPAN LANG="en-gb"> <FONT SIZE=2 FACE="Courier New">elements would look the same before and after serialisation.</FONT></SPAN><SPAN LANG="en-gb"> </SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">The only slight issue with this is that if</FONT></SPAN><SPAN LANG="en-gb"> <FONT SIZE=2 FACE="Courier New">a value was set</FONT></SPAN><SPAN LANG="en-gb"> <FONT SIZE=2 FACE="Courier New">in memory at runtime</FONT></SPAN><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">, overriding the default,</FONT></SPAN><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New"> then that value</FONT></SPAN><SPAN LANG="en-gb"> <FONT SIZE=2 FACE="Courier New">would obviously need to be serialize</FONT></SPAN><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">d.</FONT></SPAN><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New"></FONT></SPAN><SPAN LANG="en-gb"> </SPAN></P>
<BR>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">Cheers,</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">Dave.</FONT></SPAN><SPAN LANG="en-gb"></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"></SPAN><A NAME=""><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">Dave Moss</FONT></SPAN></A></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">SELEX Communications</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">Grange Road</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">Christchurch </FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">Dorset&nbsp; BH23 4JE</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">United Kingdom</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">Tel: + 44 (0) 1202 404841</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">Email: david.r.moss@seleniacomm.com</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">-----Original Message-----<BR>
From: Boris Kolpackov [<A HREF="mailto:boris@codesynthesis.com">mailto:boris@codesynthesis.com</A>]<BR>
Sent: 03 February 2006 14:47<BR>
To: Moss, David R (SELEX Comms) (UK Christchurch)<BR>
Cc: xsd-users@codesynthesis.com<BR>
Subject: Re: [xsd-users] Default values for optional elements.</FONT></SPAN><SPAN LANG="en-gb"></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">David,</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">Moss, David R (SELEX Comms) (UK Christchurch) &lt;david.r.moss@selex-comm.com&gt; writes:</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; I have a large schema that contains a lot of optional elements with</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; default values specified. In code, when a query is made as to the value</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; of one of these elements, I'm providing a hard-coded default (the same</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; value as specified in the xsd file) for cases where the element wasn't</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; present:</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; const myData_t wrapper::getData() const</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; {</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( m_parent.myData().present() )</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return m_parent.myData().get();</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return someDefaultValue;</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; }</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; This is clearly a maintenance nightmare! It also seems a bit backward as</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; a default is already specified in the xsd file.</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">Well, that's the way XML Schema spec prescribes handling of elements with</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">default values. In particular, for elements (unlike attributes), there are</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">three cases to consider:</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">1. Value specified in the instance - that value is used.</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">2. Empty value is specified - default value is used.</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">3. No element specified - element not present.</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">The following table in the manual summarizes all the cases:</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New"><A HREF="http://codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#A">http://codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#A</A></FONT></SPAN></P>
<BR>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">The reason why XML Schema specifies it this way is probably because</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">element's name (in case of substitution groups) or the xsi:type</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">attribute carries type information.</FONT></SPAN></P>
<BR>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; Is it possible to get the generated code to provide the default i.e. an</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; optional xsd flag that meant get() would return a default value if the</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; optional element wasn't present:</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; ...</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; Any thoughts or alternatives greatly appreciated (I don't want to use</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">&gt; attributes instead of elements).</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">At the moment I don't see any reasons why such an option couldn't</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">be supported. Except that, as for attributes, when this option is</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">specified, optional elements with default/fixed values would be</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">treated as belonging to the One cardinality class because their</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">values will always be present (so no need to call .get ()).</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">I will try to implement it in the next version or two (2.0.0</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">or 2.0.1).</FONT></SPAN></P>
<BR>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">hth,</FONT></SPAN></P>

<P ALIGN=LEFT><SPAN LANG="en-gb"><FONT SIZE=2 FACE="Courier New">-boris</FONT></SPAN><SPAN LANG="en-gb"></SPAN></P>

</BODY>
</HTML>
<table><tr><td bgcolor=#ffffff><font color=#000000>********************************************************************<br>
This email and any attachments are confidential to the intended<br>
recipient and may also be privileged. If you are not the intended<br>
recipient please delete it from your system and notify the sender.<br>
You should not copy it or use it for any purpose nor disclose or<br>
distribute its contents to any other person.<br>
********************************************************************<br>
</font></td></tr></table>