贵有恒,何必三更起、五更眠、最无益,只怕一日曝、十日寒。这篇文章主要讲述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 | 一个实体列表 |
- #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>
推荐阅读
- jQuery基础练习题一
- Android练习使用约束布局构建简单计算器效果
- Selenium实战练习2_实现邮箱反向的注册功能
- Linux 练习题16.1 磁盘配额
- Android软件开发实战(一本记账.app)
- MySQL 练习题16.1
- bug小记
- Linux 文件目录权限实例
- Linux练习13默认权限与特殊权限实例