[xsd-users] default value xsd and parsing
Benjamin Schindler
bschindler at inf.ethz.ch
Fri Feb 26 10:17:36 EST 2010
Thank you a lot for the thorough answer. This cleared everything up
Benjamin
On 02/26/2010 04:06 PM, Boris Kolpackov wrote:
> Hi Benjamin,
>
> Benjamin Schindler <bschindler at inf.ethz.ch> writes:
>
>> I have the following thing I'd like to achieve:
>>
>> <xs:complexType name="ServerConfiguration_t">
>> <xs:sequence>
>> <xs:element name="port" type="xs:int" default="5454"/>
>> </xs:sequence>
>> </xs:complexType>
>>
>> (I tried the same with xs:all instead of sequence)
>>
>> When I get an xml that doesn't have the port attribute, validating the
>> xml fails. But I'd expect that I get an object without the xsd::Optional
>> template which has the default value 5454 if the xml does not have it.
>
> While you say "port attribute", in the schema you have an element and
> that makes all the difference. The XML Schema spec says that for an
> element to get a default value, an empty element should be present
> in XML, as in:
>
> <port/>
>
> In other words, omitting an element from the XML completely doesn't
> result in it having a default value. Rather, if this element is
> optional, it is treated as no being present and if it is required,
> as in your case, then you will get a validation error. This behavior
> makes attributes with default value an odd construct which is not
> used much.
>
> On the other hands, for attributes, the default value is used if the
> attribute is not present, and this is used a lot in schemas.
>
> There is a table in Appendix A, in the C++/Tree Mapping User Manual
> which summarizes the differences between default values for elements
> and attributes:
>
> http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#A
>
> Boris
More information about the xsd-users
mailing list