当minoccurs=0时,如何解释XSD中基本类型的默认值



在xs:complexType中,有以下元素:

运行。net工具,如SvcUtil.exe,你会得到一个用DataContractAttribute装饰的类,其中包含以下属性:public string RegistrationNumber {get;set;}公共日期过期日期{get;set;}公共DateTime ?RegistrationEndDate{获取;设置;}

让我困惑的是:如果接收到的XML实例没有接触这3个元素,显然将使用默认值,尽管默认值在XSD中没有显式定义。string和Datetime的默认值是什么?

为了刷新我的记忆,我看了一眼

<标题> http://www.w3.org/TR/xmlschema-0/

2.2.1

总之,元素默认值和属性默认值之间的区别可以表述为:当属性缺失时应用默认属性值,当元素为空时应用默认元素值。

如果没有显式定义默认值并且元素为空/不存在怎么办?

标准似乎没有定义这种情况,但显然这将取决于接收方的实现。

对于像integer和boolean这样的数据类型,默认值很明显:0和false。从电子计算的第一天起就定义好了

但是对于string和datetime,情况有点棘手,主要是因为不同的语言对于string和datetime有不同的结构和约定。

你认为我的理解正确吗?

在MSDN中关于DataMemberAttribute。EmitDefaultValue,有一个语句:

"不建议将EmitDefaultValue属性设置为false。只有在有特定需要时才应该这样做(例如为了互操作性或减少数据大小)。"

你能告诉我为什么不推荐这样做吗?说,听起来像MS建议发出每个元素,无论minOccurs=0在XML消息?

感谢安迪

如果一个元素在XML文档中不存在,那么在内存中就不应该有任何对象表示它。可以将模式中具有minOccurs或maxOccurs的任何元素视为定义中的列表。如果它的minOccurs=0, maxOccurs=1,那么我们认为它是可选的,但实际上它是一个最多有一个元素的列表。因此,表示它的数据结构应该是一个列表(或具有可变边界的数组或…)。那么它的值的问题就没有意义了,规范中也没有歧义。

如果SvcUtil.exe不这样做,我认为它是不对的。

最新更新