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

XML正确DTD分析:IntelliJ生成DTD与自定义DTD对比咨询

关于XML高度元素的DTD设计建议

原始XML示例

<localHeight>
<localFeet>5</localFeet>
<localInches>10</localInches>
</localHeight> 

IntelliJ自动生成的DTD

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE localHeight[
<!ELEMENT localHeight (localFeet |  localInches)*>  
<!ELEMENT localFeet (#PCDATA)>  
<!ELEMENT localInches (#PCDATA)>  

]> 

该DTD的问题在于:

  • 允许空的<localHeight>元素(如下XML可通过校验)
<localHeight>
</localHeight> 
  • 允许仅包含<localFeet>或仅包含<localInches>,甚至允许重复出现多个同类型子元素,这不符合高度数据的实际语义。

自行编写的DTD

<!DOCTYPE localHeight[
<!ELEMENT localHeight (localFeet, localInches)>  
<!ELEMENT localFeet (#PCDATA)>  
<!ELEMENT localInches (#PCDATA)>  

]>  

专业建议

你的思路完全正确。自动生成的DTD只是基于单个示例做的宽松语法推断,没有考虑业务场景的语义约束。

从业务逻辑来看,一个完整的高度值必然需要同时包含英尺和英寸两个部分,缺一不可,也不会重复出现。你编写的DTD强制要求<localHeight>必须同时包含<localFeet>和<localInches>,且顺序固定,能精准约束XML结构符合实际业务规则,避免出现不完整或不合理的XML内容。

如果业务上允许两个子元素的顺序调换,可以将内容模型修改为(localFeet, localInches)|(localInches, localFeet);如果业务有明确的顺序要求,当前的写法就完全满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:07:39