如何在XSD Schema中实现AssetClass属性大小写不敏感验证并统一值
问题:XSD验证允许AssetClass属性大小写不敏感并统一值?
当前使用的XSD:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:rixmldt="http://www.rixml.org/2013/2/RIXML-datatypes" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:import namespace="http://www.rixml.org/2013/2/RIXML-datatypes" schemaLocation="RIXML-datatypes-2_4.xsd"/> <xs:element name="AssetClasses"> <xs:annotation> <xs:documentation>Container element for one or more individual AssetClass elements..</xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element ref="AssetClass" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
可能收到的XML示例:
<AssetClass assetClass="Equity"/>
需求:让XSD验证允许assetClass属性为Equity的任意大小写组合(如Equity、equity、EQUITY),且验证不失败,同时希望属性值始终统一为Equity。请问能否通过XSD实现?是枚举所有大小写组合还是用正则表达式?
解答
验证大小写不敏感:用正则表达式即可实现,无需枚举所有组合
你可以为assetClass属性定义一个基于正则表达式的简单类型,匹配Equity的任意大小写形式,这种方式比枚举所有组合简洁高效。示例修改后的完整XSD(原XSD仅引用
AssetClass元素未定义,需补充其结构):<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:rixmldt="http://www.rixml.org/2013/2/RIXML-datatypes" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:import namespace="http://www.rixml.org/2013/2/RIXML-datatypes" schemaLocation="RIXML-datatypes-2_4.xsd"/> <!-- 定义AssetClass元素结构 --> <xs:element name="AssetClass"> <xs:complexType> <xs:attribute name="assetClass" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <!-- 正则匹配每个字母的大小写变体 --> <xs:pattern value="[Ee][Qq][Uu][Ii][Tt][Yy]"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:complexType> </xs:element> <xs:element name="AssetClasses"> <xs:annotation> <xs:documentation>Container element for one or more individual AssetClass elements..</xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element ref="AssetClass" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>上述正则表达式
[Ee][Qq][Uu][Ii][Tt][Yy]会覆盖Equity所有可能的大小写组合,验证时不会报错。属性值统一为Equity:XSD无法直接实现
XSD的核心功能是验证XML的结构和数据合法性,不具备修改XML内容的能力。如果需要将输入的任意大小写值统一为Equity,你需要在XSD验证完成后,通过额外的逻辑(比如XSLT转换、编程语言处理)来修改属性值。
内容的提问来源于stack exchange,提问作者Sudarshan kumar
相关产品推荐
相关产品推荐

