DTD约束

贵有恒,何必三更起、五更眠、最无益,只怕一日曝、十日寒。这篇文章主要讲述DTD约束相关的知识,希望能为你提供帮助。
DTD约束 1.内部DTD的定义,语法如下:

< !DOCTYPE 根元素 [元素声明]>

元素声明语法:
< !ELEMENT元素名(子元素[,子元素...])>

1.(#PCDATA):普通字符串,PCDATA 是可解析字符数据(Parsed Character Data),要有括号()。2.EMPTY:空元素,既不包含字符数据,也不包含子元素。如果在文档中元素本身已经表明了明确的含义,就可以在 DTD 中用关键字 EMPTY 表明空元素。 例如:< !ELEMENT br EMPTY> ,其中br是一个没有内容的空元素。不用括号()3.ANY:任何元素,表示该元素可以包含任何的字符数据和子元素。 例如: < !ELEMENT 联系人 ANY> 表示联系人可以包含任何形式的内容。 但在实际开发中,应该尽量避免使用 ANY,因为除了根元素外,其他使用 ANY 的元素都将失去 DTD 对 XML 文档的约束效果。不用括号()。4.子元素:可以包含其他元素。通常用一对括号()将元素中要嵌套的一组子元素括起来,中间使用逗号“,”分隔,表示这些子元素按照这个顺序在 XML 中出现。 例如:< !ELEMENT 书 (书名,作者,售价)> 表示元素书中要嵌套书名、作者、售价子元素,这些子元素只能出现一次,并且按照这个顺序编写。

如果一个子元素要出现多次,我们可以使用一些符号来表示次数:
例如: < !ELEMENT 书 (书名+,作者?,售价*)>

例如: < !ELEMENT 书 (书名|作者|售价)>

2.属性定义 在定义元素的同时,还可以为元素定义属性。DTD 属性定义的基本语法格式:
【DTD约束】属性声明语法为:
< ! ATTLIST 元素名称 属性名称 属性类型 设置说明>

> 1.属性类型
序号 属性类型 含义
1 CDATA 字符串,如果出现特殊字符,需要转义
2 枚举类型 枚举列表中的一个值,用竖线“|”隔开,每次只能选择一个。
3 ID 唯一的 id,只能是字母或下划线开始。
4 IDREF 另外一个元素的 id,【reference:引用,参考】
5 IDREFS 其他 id 的列表
6 NMTOKEN 合法的 XML 名称
7 NMTOKENS 合法的 XML 名称的列表
8 NOTATION 记号的名称
9 EMTITY 一个实体
10 ENTITIES 一个实体列表
> 2.设置说明:
- #REQUIRED,表示必须出现 - #IMPLIED,属性可有可无 - #FIXED value,表示一个固定值,#FIXED "ABC",表示属性必须是这个固定值"ABC" - 默认值,表示一个默认值,如果元素不写该属性,该属性自动被设置为默认值。 如果写了该属性,就是用属性的实际值。

DTD 定义:< !ATTLIST 作者 分类 (AA|BB|CC) #REQUIRED> XML 文件:< 作者 分类="AA"> 传智播客< /作者>

DTD 定义:< !ATTLIST 书名 编号 ID #REQUIRED> XML 文件:< 书名 编号="a1"> javaWeb 程序开发入门< /书名>

DTD 定义:< !ATTLIST 售价 单位 CDATA #FIXED "元"> XML 文件:< 售价 单位="元"> 60< /售价

小案例:电视节目表 DTD
< !DOCTYPE TVSCHEDULE [ < !ELEMENT TVSCHEDULE (CHANNEL+)> < !ELEMENT CHANNEL (BANNER,DAY+)> < !ELEMENT BANNER (#PCDATA)> < !ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)> < !ELEMENT HOLIDAY (#PCDATA)> < !ELEMENT DATE (#PCDATA)> < !ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)> < !ELEMENT TIME (#PCDATA)> < !ELEMENT TITLE (#PCDATA)> < !ELEMENT DESCRIPTION (#PCDATA)> < !ATTLIST TVSCHEDULE NAME CDATA #REQUIRED> < !ATTLIST CHANNEL CHAN CDATA #REQUIRED> < !ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED> < !ATTLIST TITLE RATING CDATA #IMPLIED> < !ATTLIST TITLE LANGUAGE CDATA #IMPLIED> ]>

< ?xml version="1.0" encoding="UTF-8" standalone="yes"?> < !DOCTYPE TVSCHEDULE [ …… ]> < TVSCHEDULE NAME="CCTV"> < CHANNEL CHAN="CCTV-1"> < BANNER> XXXX< /BANNER> < DAY> < DATE> 2019-03-11< /DATE> < HOLIDAY> XXXX< /HOLIDAY> < /DAY> < DAY> < DATE> 2019-03-12< /DATE> < PROGRAMSLOT VTR="XXXX"> < TIME> 1900< /TIME> < TITLE LANGUAGE="TTTT"> XXXX< /TITLE> < DESCRIPTION> XXXX< /DESCRIPTION> < /PROGRAMSLOT> < /DAY> < /CHANNEL> < /TVSCHEDULE>


    推荐阅读