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

Xml 当minoccurs=0时,如何解释XSD中基元类型的默认值,xml,xsd,default,Xml,Xsd,Default,在xs:complexType中,有以下元素: 运行.NET工具(如SvcUtil.exe),您将获得一个用DataContractAttribute修饰的类,该类包含以下属性: 公共字符串注册号{get;set;} 公共日期时间过期日期{get;set;} 公共约会时间?RegistrationEndDate{get;set;} 让我困惑的是: 如果接收到的XML实例没有联系这3个元素,显然会使用默认值,尽管XSD中没有明确定义默认值。字符串和日期时间的默认值是什么 为了唤起我的记忆,我看了

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

运行.NET工具(如SvcUtil.exe),您将获得一个用DataContractAttribute修饰的类,该类包含以下属性: 公共字符串注册号{get;set;} 公共日期时间过期日期{get;set;} 公共约会时间?RegistrationEndDate{get;set;}

让我困惑的是: 如果接收到的XML实例没有联系这3个元素,显然会使用默认值,尽管XSD中没有明确定义默认值。字符串和日期时间的默认值是什么

为了唤起我的记忆,我看了一下

2.2.1

总之,元素和属性默认值之间的差异可以表述为:当属性缺失时应用默认属性值,当元素为空时应用默认元素值。 那么,如果默认值没有明确定义,并且元素为空/不存在,该怎么办

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

对于integer和boolean等数据类型,默认值是显而易见的:0和false。从电子计算的第一天起定义良好

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

你认为我的理解正确吗

在MSDN about DataMemberAttribute.EmitDefaultValue中,有一条语句:

“不建议将EmitDefaultValue属性设置为false。只有在有特定需要时(例如为了互操作性或减少数据大小),才应执行此操作。”

你能告诉我为什么这不是推荐的做法吗?比如说,听起来像MS建议发出每个元素,而不管XML消息中的minOccurs=0

谢谢


Andy

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

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