如何在XSD中正确表示含A、B、C三个选项的复选框?
你的XSD代码问题及修正方案
先明确你原代码里的几个错误:
userType_ListType被定义为xs:simpleType,但内部使用了<xs:sequence>,这违反XSD规则——simpleType仅用于约束单一值类型,不能包含元素序列,元素序列必须放在xs:complexType中。<xs:element>标签里的minValue和maxValue是错误属性,控制元素出现次数需用minOccurs和maxOccurs。
针对复选框多选的需求,这里提供两种常用的正确实现方式:
方式一:用complexType表示多个独立选项元素
适合XML结构中用多个<userType>节点存储选中项,示例结构:<userTypes><userType>A</userType><userType>C</userType></userTypes>
<xs:simpleType name="userType_SimpleType"> <xs:annotation> <xs:documentation> A = A type B = B type C = C type </xs:documentation> </xs:annotation> <xs:restriction base="xs:string"> <xs:enumeration value="A"/> <xs:enumeration value="B"/> <xs:enumeration value="C"/> </xs:restriction> </xs:simpleType> <xs:complexType name="userType_ListType"> <xs:annotation> <xs:documentation> 存储选中的用户类型,可多选1-3个选项 </xs:documentation> </xs:annotation> <xs:sequence> <xs:element name="userType" type="userType_SimpleType" minOccurs="1" maxOccurs="3"/> </xs:sequence> </xs:complexType>
方式二:用list类型的simpleType表示空格分隔的选项值
适合将选中项用空格拼接成单个字符串,示例结构:<userTypes>A C</userTypes>
<xs:simpleType name="userType_SimpleType"> <xs:annotation> <xs:documentation> A = A type B = B type C = C type </xs:documentation> </xs:annotation> <xs:restriction base="xs:string"> <xs:enumeration value="A"/> <xs:enumeration value="B"/> <xs:enumeration value="C"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="userType_ListType"> <xs:annotation> <xs:documentation> 存储选中的用户类型,用空格分隔多个选项,最多3个 </xs:documentation> </xs:annotation> <xs:list itemType="userType_SimpleType"/> <!-- 可选:限制选中项数量范围 --> <xs:restriction base="userType_ListType"> <xs:length minInclusive="1" maxInclusive="3"/> </xs:restriction> </xs:simpleType>
你可以根据自身XML数据的结构需求选择对应方案。
内容的提问来源于stack exchange,提问作者László Fülöp
相关产品推荐
相关产品推荐

