注:学习DTD不推荐仅靠记忆,本文给出一些实例来帮助DTD语法的学习,复现实例能够对理解有所帮助。

元素

元素是XML的核心与灵魂。
DTD中使用 <!ELEMENT element-name element-definition>
来声明所有文档元素

元素类型

1.any
该元素可以包含任何在DTD中定义的元素内容

<!ELEMENT 元素名 ANY>

2.empty
该元素在XML文件中使用空元素标记,即元素中没有内容

<!ELEMENT 元素名 EMPTY>

3.#PCDATA
纯文本元素或称简单元素
可以包含任意字符数据,但是不能包含任何子元素
4.父元素类型
只包含子元素,并且除了子元素外没有文本,通过正则表达式规定子元素出现的顺序和次数,语法分析器将这些正则表达式与XML文档中的数据模式相匹配,判别出一个文档是否是Validating XML

符号 用途
* 允许出现任意多次
+ 该对象至少出现一次
该对象可以出现一次或零次
* 允许出现任意多次
对象必须按照指定的顺序出现

5.混合元素类型
请参考其它文章,不推荐使用
实例1——仅定义了元素的DTD文档:

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT PRODUCTDATA (PRODUCT)+><!--PRODUCTDATA是根节点,子节点是PRODUCT并且它最少要出现一次-->
<!ELEMENT PRODUCT (PRODUCTNAME,DESCRIPTION,PRICE,QUANTITY)>
<!--PRODUCT下又有四个子节点,必须按照给定顺序出现-->
<!--这三个节点都是#PCDATA类型并且可以包含任何字符数据,不能包含任何子元素-->
<!ELEMENT PRODUCTNAME (#PCDATA)>
<!ELEMENT DESCRIPTION (#PCDATA)>
<!ELEMENT PRICE (#PCDATA)>
<!--QUANTITY is an empty element-->
<!ELEMENT QUANTITY EMPTY>

属性

属性是对元素的补充和修饰,它额能够将一些简单的特性和元素相关联。

四种特点的属性

1.#REQUIRED
必须赋值的属性 【required】
说明方式:

<!ATTLIST 元素名 属性名 属性类型 #REQUIRED>

2.#IMPLIED
属性值可有可无的属性,不要求给该属性赋值,无需在DTD中提供默认值 【implied】
说明方式:

<!ATTLIST 元素名 属性名 属性类型 #IMPLIED>

3.#FIXED value
固定取值的属性,需要为一个特定的属性提供一个默认值,并且不希望在XML文档中替换掉这个默认值 【fixed value(固定的值)】
说明方式:

<!ATTLIST 元素名 属性名 属性类型 #FIXED "默认值">

4.Default value
事先定义了默认值的属性,需要在DTD中提供一个默认值,可以被XML文档中的属性值替换掉
说明方式:

<!ATTLIST 元素名 属性名 属性类型 "默认值">

属性类型

CDATA
纯文本/字符串
实例2——仅使用CDATA类型的XML文档
注意:该实例使用了内部DTD格式

<?xml version="1.0" encoding="GB2312"?>
<!--一个内部DTD的示例,首先写根元素“家庭”-->
<!--包含两个元素,人至少出现一次,家电可以出现人一次,这两个元素都被定义为空类型-->
<!DOCTYPE 家庭[
<!ELEMENT 家庭 (人+,家电*)>
<!ELEMENT 人 EMPTY>
<!ELEMENT 家电 EMPTY>
<!--开始定义属性-->
<!ATTLIST 人
名字 CDATA #REQUIRED
年龄 CDATA #REQUIRED
爱好 CDATA #IMPLIED
>
<!ATTLIST 家电
名称 CDATA #REQUIRED
数量 CDATA #REQUIRED
说明 CDATA #IMPLIED
>
]>
<!--DTD部分结束-->
<家庭>
<人 名字="张三" 年龄="25"/>
<人 名字="李四" 年龄="38" 爱好="踢足球"/>
<家电 名称="彩电" 数量="三" />
</家庭>

Enumerated
列举的,类似于数组,在()内被指定
ID
以属性值的方式被文档中某个元素定义唯一的标识,用以区分具有相同结构和相同属性值的不同元素
实例3
DTD

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT 公司 ANY>
<!ELEMENT 公司职员 (#PCDATA)>
<!ATTLIST 公司职员编号 ID #REQUIRED姓名 CDATA #REQUIRED
>

XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 公司 SYSTEM "D:\我的文档\Documents\Altova\XMLSpy2014\Examples\Stduy_XML_example\DTD\example_2.dtd">
<!--编号被定义为ID,因此是不可重复的-->
<公司>
<公司职员 姓名="张三" 编号="Z001"/>
<公司职员 姓名="李四" 编号="Z002"/>
</公司>

IDREF/IDREFS
属性值引用已经定义的ID值,方法是把那个元素的ID标识符作为该元素的取值
不同的引用之间用空格分开
实例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 家庭[
<!ELEMENT 家庭 (人+)>
<!ELEMENT 人 EMPTY>
<!ATTLIST 人
relID ID #REQUIRED
parentID IDREFS #IMPLIED
name CDATA #REQUIRED
>
]>
<家庭>
<人 relID="P_1" name="爸爸"/>
<人 relID="P_2" name="妈妈"/>
<人 relID="P_3" parentID="P_1 P_2" name="儿子"/>
</家庭>

ENTITY
取值为一个已定义的实体
ENTITYS
该属性值包含多个外部的entity,不同的entity之间用空格分开
NMTOKEN
属性值只能由字母、数字、下划线…构成
本例仍然使用内部DTD

<?xml version="1.0" encoding="GB2312"?>
<!--一个内部DTD的示例,首先写根元素“poems”-->
<!DOCTYPE poems [<!ELEMENT poems (title,content)><!ELEMENT title (#PCDATA)><!--定义属性,nmtoken说明该属性只能由数字、字母、下划线构成,当encoding编码是中文码时,可以使用中文--><!ATTLIST title author NMTOKEN #REQUIRED><!ELEMENT content (#PCDATA)>
]>
<!--DTD部分结束-->
<poems>
<title author="杜甫">八阵图</title>
<content>
功盖三分国,名成八阵图。
江流石不转,遗恨失吞吴。
</content>
</poems>

NUTOKEN
属性值能由多个nmtoken构成,每个nmtoken之间用空格隔开
NOTATION
取值为一个DTD声明中的符号,这个类型对于非XML格式的类型非常有用

预定义实体

XML和HTML都保留了一些字符用于自身格式的定义
引用时,参考下表:

这就是预定义实体。
XML还提供了另外一种引用方法:

字符 实体引用
< &lt
> &gt
& &amp
&apos
" &quot

自定义实体

定义方法:

<!ENTITY entity-name "entity-content">

实例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE COMPANY [<!ELEMENT COMPANY (NAME, ADDRESS)><!ELEMENT NAME (#PCDATA)><!ELEMENT ADDRESS (#PCDATA)><!ENTITY name "青岛"><!ENTITY address "宁夏路">
]>
<COMPANY><NAME>&name; </NAME><ADDRESS>&address; </ADDRESS>
</COMPANY>

显示在浏览器中:

DTD语法 (元素、属性、实体声明)相关推荐

  1. 1.QML语法、属性和元素

    QML是一种声明性语言,用于描述应用程序的用户界面.QML可以将用户界面分解,也可以将界面元素组合为组件. QML描述了这些用户界面元素的外观和行为. 支持JavaScript来丰富此用户界面描述,以 ...

  2. Caused by: org.xml.sax.SAXParseException: 必须为元素类型 “select“ 声明属性 “paramterType“。

    Caused by: org.xml.sax.SAXParseException: 必须为元素类型 "select" 声明属性 "paramterType". ...

  3. Hibernate:映射文件元素属性说明

    为什么80%的码农都做不了架构师?>>>    Doctype <?xml version="1.0" encoding="UTF-8" ...

  4. JS操作DOM元素属性和方法

    Dom元素基本操作方法API,先记录下,方便以后使用. W3C DOM和JavaScript很容易混淆不清.DOM是面向HTML和XML文档的API,为文档提供了结构化表示,并定义了如何通过脚本来访问 ...

  5. 面向对象(类的概念,属性,方法,属性的声明,面向对象编程思维

    1 面向对象 1.1 你是如何认识新事物的? 从过往的事物中总结事物的特点(特征),并比对新事物,把新事物进行归类. 1.2 类(Class)的概念(A) 类是对一组具有相同特征和行为的对象的抽象描述 ...

  6. 系统启动时,spring配置文件解析失败,报”cvc-elt.1: 找不到元素 'beans' 的声明“异常...

    现象:spring加载配置文件applicationContext.xml出错,抛出nested exception is og.xml.sax.SAXParseException; lineNumb ...

  7. JS获取元素属性和自定义属性

    昨天有同事问我,怎么获取自定义元素的属性,我意识到这个确实是个 问题,所有总结一下自己的心得. 获取元素的属性分为两种类型: 1-获取元素常见的属性(class,id,type,value-) 2-获 ...

  8. selenium 页面经常改变元素_selenium用jquery改变元素属性

    一.jQuery 语法 jQuery 语法是通过选取 HTML 元素,并对选取的元素执行某些操作. 1.基础语法: $(selector).action() 选择符(selector)即," ...

  9. Spring框架学习3:bean元素属性

    Spring的bean的常用属性 1.scope scope用来配置bean对象是否是单例模式.单例模式是java的23种设计模式之一,指在这个项目运行中一个类的对象只会实例化一次,一般工厂创建的类都 ...

  10. python 循环赋值_计算机二级Python语言程序设计 第2章Python语言基本语法元素

    第二章学习知识导图 本章概述:本章目的是了解基础的Python相关知识 考点主要是: 1) 程序的基本语法元素:程序的格式框架.缩进.注释.变量.命名.保留字.数据类型.赋值语句.引用 2) 基本输入 ...

最新文章

  1. CSS实现 全屏 遮罩
  2. centOS安装pip
  3. 射频篇(二) 模拟、射频器件学习(2) ——功分器(Power divider)
  4. Java网页小程序——Java Applet
  5. 东师计算机应用基础在线作业,东师《计算机应用基础》15春在线作业1答案
  6. 支付361万元“家庭抚养费”后,贾跃亭向法院申请与甘薇离婚?
  7. python cls
  8. uc浏览器邀请码_UC密保手机不能用?冬树教你如何一招申诉成功!
  9. 近世代数课后习题作业 1
  10. FW/IDS/WAF/IPS的区别
  11. 读论文《Toward Controlled Generation of Text》
  12. 理县“有福童享”“牵手圆梦 陪伴成长”关爱折翼天使志愿服务活动
  13. ICG-PEG-Biotin结构式,吲哚菁绿-聚乙二醇-生物素 荧光染料聚乙二醇衍生物
  14. 上传文件到gitee仓库的步骤
  15. 服务器cpu性能最大值,服务器cpu性能排行
  16. 2018,华米高歌猛进的一年
  17. 祝贺上海铭控成为北京消防协会消防信息化会员单位!
  18. 创意红色祥云中国风PPT模板
  19. vue $refs基本使用
  20. Java使用多线程处理任务等待任务全部执行

热门文章

  1. java公告栏源码_公告栏view
  2. 计算机中丢失glut.dll,OpenGl的源程序,运行就提示,计算机丢失 glut32.dll文件
  3. “1+7+N”改革工作体系介绍
  4. quicktime for java,QuickTime是什么意思
  5. Android常用应用市场和应用包名
  6. xpwifi热点设置android,WinXP笔记本设置WiFi热点的方法
  7. 注册表编辑已被管理员禁用—解决办法
  8. 神经网络之输出层设计
  9. CSI笔记【10】:阵列信号处理及MATLAB实现(第2版)阅读随笔(二)
  10. SSM+中小型企业绩效管理系统毕业设计-附源码081536