在xsd中,当我们有一个类型为xs:ID或xs:Integer的属性为use:required时,我们可以将空字符串传递给它吗?理想情况下这不可能。需要添加什么才能实现这一目标?
答案 0 :(得分:3)
如果您需要允许包含int或空字符串的属性,您可以定义自定义类型并将其用作属性的类型:
<xs:simpleType name="emptyInt">
<xs:union>
<xs:simpleType>
<xs:restriction base='xs:string'>
<xs:length value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base='xs:float'>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
或使用regExp:
<xs:simpleType name="emptyInt">
<xs:restriction base="xs:string">
<xs:pattern value="-?\d*"/>
</xs:restriction>
</xs:simpleType>
答案 1 :(得分:1)
如果您声明某个属性属于xs:ID
或xs:integer
类型,则该属性的值为空字符串无效。无论属性是必需属性还是可选属性,都是如此。
具体来说,<a x1=""/>
和<a x2=""/>
对此XSD都无效:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="1.0">
<xs:element name="a">
<xs:complexType>
<xs:attribute name="x1" type="xs:ID"/>
<xs:attribute name="x2" type="xs:integer"/>
</xs:complexType>
</xs:element>
</xs:schema>
答案 2 :(得分:0)
定义接受整数或空字符串的类型的两种可能方法是:
(a)使用itemType = integer和maxLength = 1
定义列表类型(b)使用成员类型xs:integer和my:emptyString定义一个union类型,其中my:EmptyString由xs:string的限制定义,长度为=。