我有一个XSD,我需要一个日期元素为空或者在特定日期之后(2015年10月10日)。
因此,应允许以下内容:
<DDate></DDate>
<DDate>2015-10-10</DDate>
我的XSD定义为:
<xs:element name = "DDate" nillable="true" >
<xs:simpleType>
<xs:restriction base="xs:date">
<xs:minInclusive value="2015-10-01"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
这会强制日期正确,但不允许日期为空。任何见解或建议将不胜感激。
答案 0 :(得分:3)
您的定义已经允许空DDate
,除了一个限制外,您还必须指定xsi:nil="true"
,如下所示:
<!-- ns decl. should go to the root element -->
<DDate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="xsd-date-empty.xsd"
xsi:nil="true" />
但是,如果使用&#34;允许为空&#34;,则表示您希望在不使用xsi:nil
的情况下允许空格和/或空节点,有很多方法可以做到这一点。我可能会选择一个工会,就像这样:
<xs:element name = "DDate" nillable="true" >
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:date">
<xs:minInclusive value="2015-10-01"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse" />
<xs:length value="0" />
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:element>
这意味着只允许a:
答案 1 :(得分:2)
一般来说,允许&#34; X或什么都没有&#34;在元素中,您有三个选项:
(a)声明元素可以为零。但这需要实例具有属性xsi:nil =&#39; true&#39;。我讨厌这种方法,从不使用它,但我提到它是完整的。
(b)将类型声明为X的并集和约束为长度为零的字符串。 (正如亚伯所说)
(c)将类型声明为带有maxLength 1的X列表。这往往是我自己的偏好。
(b)和(c)之间的选择可能取决于您如何使用架构。如果只是为了验证,两者都同样有效。如果它适用于模式感知的XSLT和XQuery处理,则列表类型效果更好,尽管3.0版本中的联合开始得到很好的支持。如果它用于Java或C#中的数据绑定,那么您将不得不问别人,这不是我的区域。