我想限制用户输入(1920-2000)范围之外的年份部分。年份应介于此间隔之间,我不想限制特定日期,但我希望日期的YEAR部分位于此范围内。
我应该在XSD中做些什么?
现在我正在这样做,但它正在创建一个问题,并且XML没有正确验证。
<xs:element name="dateOfBirth">
<xs:complexType>
<xs:sequence>
<xs:element name="Year">
<!--Restriction applied : Year value can lie between 1920-2000-->
<xs:simpleType>
<xs:restriction base="xs:gYear">
<xs:minInclusive value="1920"/>
<xs:maxInclusive value="2000"/>
</xs:restriction>
</xs:simpleType>
<!--Restriction applied : Year value can lie between 1920-2000-->
</xs:element>
<xs:element name="-" type="xs:char"/>
<xs:element name="Month">
<!--Restriction applied : Month value can lie between 1-12-->
<xs:simpleType>
<xs:restriction base="xs:gMonth">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="12"/>
</xs:restriction>
</xs:simpleType>
<!--Restriction applied : Month value can lie between 1-12-->
</xs:element>
<xs:element name="-" type="xs:char"/>
<xs:element name="Day">
<!--Restriction applied : Day value can lie between 1-31-->
<xs:simpleType>
<xs:restriction base="xs:gDay">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="31"/>
</xs:restriction>
</xs:simpleType>
<!--Restriction applied : Day value can lie between 1-31-->
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
答案 0 :(得分:3)
也许您需要添加基本类型的整数,如下所示:
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
否则你可能正在进行ascii比较而不是整数比较。
答案 1 :(得分:2)
你真的很困惑。
您对Wellens的回复表明您的实例数据的格式为<DOB>1988-01-24</DOB>
。这是xs:date类型的值。该元素必须在模式中描述为一个简单类型,而不是一个复杂类型,其结构是(子)元素的序列。如果它的形式是
<DOB><year>1988</year><month>01</month><day>24</day></DOB>
然后你可以使用一个复杂类型,它的定义是一个包含gYear类型元素,gMonth类型元素和gDay类型元素的序列。但我不认为你的数据是这样的。
在尝试定义名称为“ - ”的元素时,您的困惑尤其明显。这甚至不是有效的XML元素名称,更不用说数据中出现的元素名称了。
那么,你怎么限制xs:date在1920-01-01到2000-12-31的范围内呢?答案是使用
<xs:simpleType>
<xs:restriction base="xs:date">
<xs:minInclusive value="1920-01-01"/>
<xs:maxInclusive value="2000-12-31"/>
<xs:pattern value=".{10}"/>
</xs:restriction>
</xs:simpleType>
xs:pattern将值限制为10个字符的字符串。这可以防止附加时区,例如1920-01-01Z。