DTD 元素声明()最全详解
(只讲这一件事,讲透讲死)
1. 基本语法(永远就这一个格式)
<!ELEMENT 元素名称 内容模型>
2. 内容模型 9 大类(记住这 9 个就天下我有)
| 类别 | 写法示例 | 含义解释 | 常见使用场景 |
|---|---|---|---|
| 1. 纯文本 | (#PCDATA) | 只能放文字,不能再嵌套标签 | 、、<price></td> </tr> <tr> <td>2. 空元素</td> <td>EMPTY</td> <td>什么都不能放(<br/>、<hr/> 这种)</td> <td><br>、<img>(老派写法)</td> </tr> <tr> <td>3. 任意内容</td> <td>ANY</td> <td>随便放什么(基本别用,太松)</td> <td>临时调试用</td> </tr> <tr> <td>4. 只包含子元素</td> <td>(子元素列表)</td> <td>只能包含下面列出的子元素</td> <td>大多数结构化数据</td> </tr> <tr> <td>5. 顺序(逗号)</td> <td>(name, age, email)</td> <td>必须严格按这个顺序出现</td> <td>书籍、人员信息</td> </tr> <tr> <td>6. 选择(竖线)</td> <td>(male | female)</td> <td>二选一</td> <td>性别、类型</td> </tr> <tr> <td>7. 零或一次(问号)</td> <td>email?</td> <td>可有可无</td> <td>可选字段</td> </tr> <tr> <td>8. 零或多次(星号)</td> <td>phone*</td> <td>可以没有,也可以出现很多次</td> <td>标签、电话、作者多个</td> </tr> <tr> <td>9. 一次或多次(加号)</td> <td>author+</td> <td>最少出现一次,可以更多</td> <td>必须有作者,至少一个</td> </tr> </tbody> </table> <h4>3. 数量修饰符(只记住这 3 个符号)</h4> <table> <thead> <tr> <th>符号</th> <th>含义</th> <th>记忆口诀</th> </tr> </thead> <tbody> <tr> <td>?</td> <td>0 或 1 次</td> <td>“有也行,没有也行”</td> </tr> <tr> <td>*</td> <td>0 或多次</td> <td>“随便多少个都行”</td> </tr> <tr> <td>+</td> <td>1 或多次</td> <td>“至少一个,想多多少”</td> </tr> <tr> <td>无符号</td> <td>必须正好 1 次</td> <td>“必须有,而且只能一个”</td> </tr> </tbody> </table> <h4>4. 终极组合实战表(直接抄)</h4> <table> <thead> <tr> <th>需求描述</th> <th>DTD 写法</th> </tr> </thead> <tbody> <tr> <td>只能放文字</td> <td><!ELEMENT title (#PCDATA)></td> </tr> <tr> <td>空标签</td> <td><!ELEMENT br EMPTY></td> </tr> <tr> <td>一本书必须有标题、至少一个作者、价格</td> <td><!ELEMENT book (title, author+, price)></td> </tr> <tr> <td>人有姓名、年龄、0~N 个电话</td> <td><!ELEMENT person (name, age, phone*)></td> </tr> <tr> <td>地址可以是国内或国外,二选一</td> <td><!ELEMENT address (domestic | foreign)></td> </tr> <tr> <td>文章有标题、正文、0 或 1 个摘要、0~N 个标签</td> <td><!ELEMENT article (title, content, summary?, tag*)></td> </tr> <tr> <td>联系方式必须是电话或邮箱至少一种</td> <td><!ELEMENT contact (phone | email)+></td> </tr> </tbody> </table> <h4>5. 括号的用法(超级重要!)</h4> <p>括号用来分组,优先级最高:</p> <table> <thead> <tr> <th>写法</th> <th>含义</th> </tr> </thead> <tbody> <tr> <td>(name, (phone | email)*)</td> <td>先写名字,然后可以有 0~N 个电话或邮箱</td> </tr> <tr> <td>((first, last) | company)</td> <td>要么是个人名(姓+名),要么是公司名</td> </tr> <tr> <td>(title, author+, price?, isbn?)</td> <td>标题 + 至少一个作者 + 价格可选 + ISBN 可选</td> </tr> </tbody> </table> <h4>6. 经典 30 秒速记口诀</h4> <pre><code>逗号排队,竖线二选一, 问号可选,星星随便几, 加号至少一,括号先算里!</code></pre> <h4>7. 10 秒判断对错(练手题)</h4> <table> <thead> <tr> <th>写法</th> <th>对还是错?</th> <th>原因</th> </tr> </thead> <tbody> <tr> <td><!ELEMENT book (title, author*)></td> <td>正确</td> <td>标题必须有,作者 0~N 个</td> </tr> <tr> <td><!ELEMENT book (title author)></td> <td>错误</td> <td>缺逗号</td> </tr> <tr> <td><!ELEMENT person (name, age?)></td> <td>正确</td> <td>年龄可选</td> </tr> <tr> <td><!ELEMENT phone (#PCDATA)+></td> <td>错误</td> <td>(#PCDATA) 不能加 + * ?</td> </tr> </tbody> </table> <p>现在你已经彻底掌握 DTD 元素声明了! <br /> 想直接抄一个「博客完整元素结构」或「学生成绩表」模板吗? <br /> 回复“博客”或“成绩表”我立刻发给你现成的!</p> |