XML DTD 文档类型定义

【简述
  DTD 规定了一个语法分析器以解释一个
  Validating XML 文档所需要知道的所有规则的细节

内部 DTD 声明

  <!DOCTYPE 根元素名[
	元素描述
  ]>

案例:

  <?xml version="1.0" encoding="GB2312"?>
  <!DOCTYPE myfile[
	  <!ELEMENT title (#PCDATA)> <!-- 中间不能少了空格 否则会报错 -->
	  <!ELEMENT title (#PCDATA)> <!-- 中间不能少了空格 否则会报错 -->
]>

外部 DTD 声明

<!DOCTYPE 根元素名 SYSTEM/PUBLIC "dtd 文件路径">
  !DOCTYPE : 要定义一个 DOCTYPE
  SYSTEM/PUBLIC: 两个选其一
	SYSTEM: 自己定义的
	PUBLIC: 权威机构定义的

元素声明

  <!ELEMENT element-name element-definition>
  !ELEMENT 表示开始元素设置 必须大写
  element-name 表示要设置的元素名称
  element-definition 定义元素的类型

元素类型

【ANY 类型
  语法格式: <!ELEMENT 元素名 ANY>
  该元素可以包含任何在 DTD 中定义的元素内容
  元素出现的次数和顺序将不受限制
【EMPTY 类型 
  语法格式: <!ELEMENT 元素名 EMPTY>
  不能包含子元素和文本 但可以有属性
【#PCDATA 类型 
  语法格式: <!ELEMENT 元素名 (#PCDATA)>
  可以包含任何字符数据但不能包含子元素
【父元素类型 与正则配合使用 
  语法格式: <!ELEMENT element(A, B+, C*, D?)>
  表明 element 元素是父元素 并且它必须有正好一个 A
  至少一个 B 零个或多个 C 以及零个或一个 D
  <!ELEMENT element(A|B|C)>
  父元素 element 可能有 A或B或C
【混合元素类型 
  语法格式: <!ELEMENT 元素名(#PCDATA|子元素名1|子元素名2|....|子元素n)*>
【属性声明
  语法格式:<!ATTLIST 元素名
		  属性名 	属性类型	属性特点
		  .....
		>
【属性特点
  #REQUIRED 格式:<!ATTLIST 元素名 属性名 #REQUIRED>
  必须赋值的属性 必须为这个属性赋予一个值
  
  #IMPLIED : 格式:<!ATTLIST 元素名 属性名 #IMPLIED>
  属性值可有可无 不用设定默认值
  
  #FIXED value 格式:<!ATTLIST 元素名 属性名 #FIXED "默认值">
  固定取值属性 需要提供一个默认值 不希望替代该属性值
  
  Default value 格式:<!ATTLIST 元素名 属性名 属性类型 "默认值">
  事先定义了默认值的属性 需要在 DTD 中提供一个默认值
  
  
【属性类型
  CDATA	纯文本 由可显示字符组成的字符串
  格式:<!ATTLIST 元素名 属性名 CDATA 属性特点>
  实例:<!ATTLIST 木偶 姓名 CDATA #REQUIRED>
  案例:<!ATTLIST 木偶 姓名="匹诺曹 123 Pi Nuocao"/>

  CDATA区: 
	<开始标签名>
		<![CDATA[ ....文本内容 !]]>, 里面内容可以随便写
  	</结束标签名>
  	
  Enumerated 收取来自一组可接收的取值范围 在 () 内被指定
  
  ID 为某个元素定义唯一标识
  
  IDREF 引用已定义的 ID 值
  
  IDREFS 应用已定义的 ID 值
  
  ENTITY 取值为一个已定义的实体(特殊字符)
  
  ENTITIES 包含了多个外部 entity 不同的 entity 之间用空格隔开
  
  NMTOKEN 属性值只能由【字母 数字 下划线 . : -】组成
  
  NMTOKENS 属性值能够由多个 nmtoken 组成 每个 nmtoken 之间用空格隔开
  
  NOTATION 取值为一个 DTD 中声明的符号

来自《XML编程与应用教程(第2版)》自行整理的笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值