关于XML的DTD概述
1 DTD概述
1.1 什么是DTD
DTD(Document Type Definition),文档类型定义,用来约束XML文档。或者可以把DTD理解为创建XML文档的结构!例如可以用DTD要求XML文档的根元素名为<students>,<students>中可以有1~N个<student>,<student>子元素为<name>、<age>和<sex>,<student>元素还有number属性。
DTD不是XML文档,它是XML文档的约束文件!就像法律与人一样!
展示DTD文档
<!ELEMENT students (student+)> 定义元素students,其内容为1~N个student元素。
<!ELEMENT student (name,age,sex)> 定义元素student,内容依次为name、age、sex元素
<!ELEMENT name (#PCDATA)> 定义元素name,内容为文本
<!ELEMENT age (#PCDATA)> 定义元素age,内容为文本
<!ELEMENT sex (#PCDATA)> 定义元素sex,内容为文本
1.2 DTD分类
l 内部DTD:在XML文档内部嵌入DTD,只对当前XML文档有效;
l 外部DTD:独立的DTD文件,扩展名为.dtd;
- 本地DTD:DTD文件在本地,不在网络上。自己项目,或本公司内部使用的;
- 公共DTD:DTD文件在网络上,不在本地。都是大公司或组织发布的,共大家使用!
1.3 内部DTD
<!DOCTYPE 根元素名称[
DTD内容
]>
内部DTD:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<!DOCTYPE students [
<!ELEMENT students (student+)>
<!ELEMENT student (name, age, sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
]>
<students>
<student>
<name>zhangSan</name>
<age>23</age>
<sex>male</sex>
</student>
</students>
l 位置:内部DTD在文档声明下面,在根元素上面;
l 语法格式:放到“<!DOCTYPE 根元素名称 [”和“]>”之间;
l 只对当前XML文档有效;
<!DOCTYPE students[
DTD约束内容
]>
1.4 SYSTEM DTD
<!DOCTYPE 根元素名称 SYSTEM “xxx.dtd”>
本地DTD
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<!DOCTYPE students SYSTEM "students.dtd "> dtd文件路径
<students>
<student>
<name>zhangSan</name>
<age>23</age>
<sex>male</sex>
</student>
</students>
students.dtd
<!ELEMENT students (student+)>
<!ELEMENT student (name, age, sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
l 位置:本地硬盘上;
l 语法格式:直接定义元素或属性即可;
l 本地所有XML文档都可以引用这个dtd文件;
<!DOCTYPE 根元素名称 SYSTEM “dtd路径”>
1.5 公共DTD
<!DOCTYPE students PUBLIC “描述信息例如:版本作者语言等等” “网络上DTD的路径”>
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<!DOCTYPE students PUBLIC "-//qdmmy6//DTD ST 1.0//ZH" "http://www.qdmmy6.com/xml/dtds/st.dtd">
<students>
<student>
<name>zhangSan</name>
<age>23</age>
<sex>male</sex>
</student>
</students>
<!DOCTYPE 根元素名称 PUBLIC “信息” “位置”>
公共DTD是说,DTD由某个公司或权威组织发布的,供大家使用的DTD。其格式如下:
<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD网址">
当然你需要知道要使用的DTD的名称和网址。如果某个机构公布了DTD,那么一定也会公布DTD的名称和网址。
2 DTD语法之定义元素(了解)
2.1 定义元素语法
定义元素语法:<!ELEMENT 元素名 元素描述>
l <!ELEMENT name (#PCDATA)>,定义名为name的元素,内容为文本类型。
l <!ELEMENT student (name,age,sex)>,定义名为student元素,内容依次为name、age、sex元素;
l <!ELEMENT student ANY>,定义名为student元素,内容任意;
l <!ELEMENT student EMPTY>,定义名为student元素,不能有内容,即空元素,注意空元素是可以有属性的。<student />
2.2 子元素出现次数
可以使用*、+、?来指定子元素出现的次数
*:可以出现0~N次;
l +:可以出现1~N次;
l ?:可以出现0~1次。
例如:<!ELEMENT student(name,age?,hobby*,grade+) >,定义student元素,第一子元素为name,必须且仅能出现一次,age是可有可无的,hobby可以出现0~N次,grade可以出现1~N次。
2.3 枚举类型子元素
<!ELEMENT student (name | age | sex)>,表示student子元素为name、age、sex其中之一,必须仅且能选择其一。<!ELEMENT men (wife|girlfriend)*>
2.4 练习
l 根元素为students,可以包含1~N个student元素;
l student元素依次包含:name、age、sex元素;
l name、age、sex元素的内容类型为文本内容;
l 要求SYSTEM外部DTD。
3 DTD语法之定义属性
3.1 定义属性的语法
<!ATTLIST 元素名 属性名 属性类型 设置说明>
例如:<!ATTLIST student number CDATA #REQUIRED>,给student元素定义属性number,类型为文本,这个默认是必须的。
3.2 属性设置说明
l #REQUIRED:说明属性是必须的;
l #IMPLIED:说明属性是可选的;
l 默认值:在不给出属性值时,使用默认值。
3.3 属性的类型
l CDATA:文本类型;
l Enumerated:枚举类型;
l ID:ID类型,ID类型的属性用来标识元素的唯一性,即元素的ID属性值不能与其他元素的ID属性值相同;
l IDREF:ID引用类型,用来指定另一个元素,与另一个元素建立关联关系,IDREF类型的属性值必须是另一个元素的ID。
<!ELEMENT students (student+) > 定义students,可以包含1~N个student元素
<!ELEMENT student EMPTY> 定义student元素,该元素为空元素,即不能有元素体
<!ATTLIST student number ID #REQUIRED> 为student定义属性number,类型为ID,该属性是必须出现的。
<!ATTLIST student name CDATA #REQUIRED> 为student定义属性name,类型为字符串,该属性是必须的。
<!ATTLIST student sex (male | female) "male" > 为student定义属性sex,类型为枚举,可选值为male或female,默认值为male
<!ATTLIST student friend IDREF #IMPLIED> 为student定义属性friend,类型为IDREF,该属性是可选的。
<?xml version="1.0" ?>
<!DOCTYPE students SYSTEM "students.dtd"> <students>
<student number="itcast_001" name="zhangSan"/>
<student number="itcast_002" name="liSi" sex="male"/>
<student number="itcast_003" name="wangWu" sex="female" friend="itcast_002"/>
</students>
4 DTD语法之定义实体(了解)
4.1 什么是实体
有时在XML中会出现很多相同的内容,例如“北京传智播客教育科技有限公司”,这个名称太长了,我们希望把这个值与一个“符号”绑定,然后在需要这个名称时使用它绑定的“符号”即可。这个符号就是实体了。例如:“&传智;”!
其中“传智”是实体名,而“北京传智播客教育科技有限公司”是实体值,XML被解析时,所有实体会被替换成实体名。
4.2 实体分类(了解)
实体分为两种:一般实体和参数实体。
l 一般实体:在XML文档中使用;
l 参数实体:在DTD使用。
4.3 一般实体(了解)
l 定义一般实体:<!ENTITY 实体名 “实体值”>,例如:<!ENTITY 大美女 “白冰”>;
l 一般实体引用:&实体名;,例如<xxx>&大美女;</xxx>。
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<!DOCTYPE students SYSTEM "a.dtd"> <students>
<student number="itcast_001" name="zhangSan"/>
<student number="itcast_002" name="liSi" sex="male"/>
<student number="itcast_003" name="wangWu" sex="female" friend="itcast_002"/>
<student number="itcast_004" name="&itcast;" />引用一般实体
</students>
<!ELEMENT students (student+) >
<!ELEMENT student EMPTY>
<!ATTLIST student number ID #REQUIRED>
<!ATTLIST student name CDATA #REQUIRED>
<!ATTLIST student sex (male | female) "male">
<!ATTLIST student friend IDREF #IMPLIED>
<!ENTITY itcast "北京传智播客教育科技有限公司"> 定义一般实体
4.4 参数实体(了解)
l 定义参数实体:<!ENTITY % 实体名 "实体值">,“%”与实体名之间的空格是必须的;
- 例如:<!ENTITY % friend "student friend IDREF #IMPLIED">
l 参数实体引用:%实体名;;
- 例如:<!ATTLIST %friend;>
参数实体是在DTD内部使用,而不是在XML中使用。
在内部DTD中使用参数实体会有诸多限制。
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<!DOCTYPE students SYSTEM "a.dtd"> <students>
<student number="itcast_001" name="zhangSan"/>
<student number="itcast_002" name="liSi" sex="male"/>
<student number="itcast_003" name="wangWu" sex="female" friend="itcast_002"/>
<student number="itcast_004" name="&itcast;"/>
</students>
<!ELEMENT students (student+) >
<!ELEMENT student EMPTY>
<!ATTLIST student number ID #REQUIRED>
<!ATTLIST student name CDATA #REQUIRED>
<!ATTLIST student sex (male | female) "male">
<!ENTITY % friend "<!ATTLIST student friend IDREF #IMPLIED>"> 定义参数实体
%friend; 参数实体引用
<!ENTITY itcast "北京传智播客教育科技有限公司">
关于XML的DTD概述的更多相关文章
- 【PHP XML与dtd概述【完整版】】
一.XML文件简介 关于XML的大多数人都知道一些,HTML->xhtml->xml,这个顺序本来应当是HTML发展的顺序. XML可以当做配置文件使用,还可以充当小型的数据库. vers ...
- XML与DTD(够用)
1: 概述 1.1 什么是XML 1.2 三个重点 1.3规则 1.4 常用转义 2: Xml声明 XML 中,空格会被保留 XML 以 LF 存储换行 3:Xml标签 4:Xml元素 5:XML 属 ...
- XML约束——DTD约束
参考: 方立勋老师的讲课视频. 什么是XML约束 •在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 为什么需要XML约束 常用的约束技术 •XML DTD • ...
- xml约束DTD演示
此演示xml和DTD在一个文件中 book.xml <?xml version="1.0" encoding="utf-8"?> <!DOCT ...
- jdom dom4j解析xml不对dtd doctype进行验证(转)
一.写在所有之前:因为dom4j和jdom在这个问题上处理的方法是一模一样的,只是一个是SAXBuilder 一个SAXReader,这里以jdom距离,至于dom4j只需要同理替换一下就可以了.二. ...
- XML 和 DTD
1.XML 1.1xml简介 a)xml,eXtensible Markup Language,可扩展标记语言,是一种标记语言: b)xml是一种非常灵活的语言,没有固定的标签,所有的额标签都可以自定 ...
- XML与DTD简介
(详细学习参考)https://blog.csdn.net/u013087513/article/details/52745509 XML约束之DTD的使用 (1)为什么要有约束? XML都是用户自定 ...
- 【JAVA与XML、dtd约束、Schema约束】
一.XML. (1)XML:Extensible Markup Language (2)XML是一种标记语言. (3)XML的设计宗旨是传输数据,而不是显示数据. (4)XML标签没有被预定义,即使用 ...
- 【php基础】XML,DTD实例
要求一:能看懂别人写的DTD文件,自己能写更好.例如products.dtd: <!ENTITY AUTHOR "John Doe"> <!ENTITY COMP ...
随机推荐
- opencv linux
This link which you also mentioned describes the necessary steps to compile OpenCV on your machine. ...
- 设计模式_Facade_门面模式
形象例子: 我有一个专业的Nikon相机,我就喜欢自己手动调光圈.快门,这样照出来的照片才专业,但MM可不懂这些,教了半天也不会.幸好相机有Facade设计模式,把相机调整到自动档,只要对准目标按快门 ...
- Ubuntu 设置简单密码,复杂度太高
Ubuntu 中创建的用户密码复杂度很高,如果想设置1234 ,或者与账户名相同的密码时,SystemSetting 中是不可以设置的. 可以通过简单的命令来设置 其中 anyongfei 是账户名 ...
- NOIP2004 津津的储蓄计划
一.津津的储蓄计划 (Save.pas/dpr/c/cpp). [问题描述] 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同. ...
- HDU 4283 You Are the One (12年天津 区间DP)
题意:有一个队列,每个人有一个愤怒值a[i],如果他是第k个上场,不开心指数就为(k-1)*a[i].但是边上有一个小黑屋(其实就是个堆栈),可以一定程度上调整上场程序 思路:枚举区间和每个人第几个上 ...
- 利用迅雷提供的接口从磁力链得到bt种子文件
本地下载工具的磁力链下载速度不给力,而百度云盘有提供离线下载服务,相当于就是直接到服务器取个链接而已.但这需要bt文件,而我只有链力链.网上搜了一下,可以从磁力链构造一个bt文件的下载地址,用pyth ...
- leetcode@ [208] Implement Trie (Prefix Tree)
Trie 树模板 https://leetcode.com/problems/implement-trie-prefix-tree/ class TrieNode { public: char var ...
- 关于mac 80端口问题
使用 maven启动 jettry时 ,jetty使用的是80端口 ,但是 mac 在1024以下的端口似乎是不让随便使用的. 在网上查了好多方式,其中的一种说是做端口转发,其实也就是把80转换成别的 ...
- usb device selection
- ACCESS-类型转换函数
类型转换涵数: 函数 返回类型 expression 参数范围 CBool Boolean 任何有效的字符串或数值表达式. CByte Byte 0 至 ...