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

如何在DTD中验证大小写不敏感的属性值并解决声明报错?

问题解决方法

首先,你原来的DTD写法完全错误,DTD的ATTLIST语法根本不支持直接加正则表达式做值验证,而且你的语法格式不符合规范,这才导致了报错。更关键的是,DTD本身没有能力实现大小写不敏感的属性值匹配——DTD只能限制属性的类型(比如NMTOKEN)和是否必填,没法精确约束属性值的内容,更别说忽略大小写的匹配。

要实现你要的需求,得换用XML Schema(XSD),它支持正则验证,还能指定大小写不敏感的匹配规则。下面是具体实现:

XSD示例代码

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <!-- 定义makeOverText元素 -->
  <xs:element name="makeOverText">
    <xs:complexType>
      <!-- 定义id属性:必填,值需大小写不敏感匹配common02v1 -->
      <xs:attribute name="id" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <!-- flags="i"开启大小写不敏感匹配 -->
            <xs:pattern value="common02v1" flags="i"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
</xs:schema>

验证逻辑说明

  • use="required"确保id属性是必填项,满足你的第一个要求。
  • pattern的value="common02v1"配合flags="i",会忽略大小写匹配属性值,不管是CommOn02V1还是comMON02V1这类变体,都会被判定为合法。

合法的XML示例

<?xml version="1.0" encoding="UTF-8"?>
<makeOverText xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:noNamespaceSchemaLocation="your-schema-file.xsd">
  <!-- 以下id值都会通过验证 -->
  <!-- <makeOverText id="common02v1"/> -->
  <!-- <makeOverText id="CommOn02V1"/> -->
  <!-- <makeOverText id="comMON02V1"/> -->
</makeOverText>

如果一定要坚持用DTD,那只能做到“必填+NMTOKEN类型”的验证,没法实现大小写不敏感的精确值匹配,这是DTD本身的功能限制,没有办法绕过。

内容的提问来源于stack exchange,提问作者A Programmer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 00:53:13