我想为 XML 创建 XSD 。我有使用xs:string
数据类型声明的XML元素,其中数据是必需的。我创建了一个XSD并设置了minOccurs="1"
,但后来发现它的目的是检查元素是否出现在XML中。我还发现有一个关键字use="required"
,但它是属性的,不能在XML元素中使用。我终于尝试了nillable="false"
但是我的元素中没有任何数据验证了XSD。
这是我的文件:
<HelloWorld>
<Name></Name>
<Gender></Gender>
</HelloWorld>
和XSD:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="HelloWorld">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="Name" minOccurs="1"/>
<xs:element type="xs:int" name="Gender"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
这里我希望Name
元素中的数据始终存在(它是必填字段)。当我验证此文件时,它将为Gender
抛出一个错误,说它包含一个无效的整数。如果您输入一些数字,它将开始成功验证,但它不会检查Name
元素内的数据。
答案 0 :(得分:1)
验证是因为空字符串 是有效的xs:string
。空Gender
失败,因为空字符串不是有效xs:int
。
如果要强制Name
验证在空时失败,则必须添加限制。你选择你需要什么样的限制:最小字符串长度,某些字符串字符(枚举或模式)等。在下面的例子中,我添加了一个限制,要求字符串至少有一个字符长:
<xs:element name="Name" minOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
如果Name
为空,它将失败。