我今天正在引用XSD spec查找小数类型的定义。在其中,我发现了两种不同的数据类型冲突定义,词汇定义和下面引用的规范定义:
3.2.3.1词汇表示
decimal 具有由有限长度组成的词汇表示 由句点分隔的十进制数字序列(#x30-#x39) 小数指标。允许使用可选的前导符号。如果标志是 省略,假设“+”。前导零和尾随零是可选的。 如果小数部分为零,则可以省略句点和后续零点。例如:-1.23,12678967.543233,+ 100000.00, 210。
3.2.3.2规范表示
十进制的规范表示由禁止定义 词汇表示中的某些选项(§3.2.3.1)。 具体而言,禁止使用前面的可选“+”符号。的的 小数点是必需的。前导零和尾随零 禁止受以下条款限制:必须至少有一位数字 在小数点的右侧和左侧,可能是零。
总之,如果小数的小数部分为零,则词法表示允许缺少小数点和尾随零,而规范表示明确指出小数是必需的。
这些定义中的哪一个是“正确的”?我的应用程序发送词法表示,消费应用程序期望规范表示。
答案 0 :(得分:4)
XSD中的有效性是根据词汇表示而不是规范表示来定义的,因此根据严格按照XSD要求xs:decimal
排除小数点的任何合同,您的应用程序完全在其权利范围内。没有分数部分。
规范表示并未在XSD中使用,但提供了将数据类型序列化为其他W3C建议(如XPath / XQuery)的标准方法。