You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 08:00:30