DTD约束:DTD的声明和引用

1.内部DTD文档

<!DOCTYPE 根元素 [定义内容]>

2.外部DTD文档

  <!DOCTYPE 根元素 SYSTEM "DTD文件路径">
或者
<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文件的URL">

 3、DTD元素基本语法: <!ELEMENT 元素名称  类别> 或 <!ELEMENT 元素名称 (元素内容)>

- ELEMENT是关键字,是不能修改的

-元素类型,必须要大写!CONTENT的内容有三种写法:

()EMPTY——表示该元素不能包含子元素和文本,但可以有属性。
()ANY——表示该元素可以包含任何在该DTD中定义的元素内容
()#PCDATA——可以包含任何字符数据,但是不能在其中包含任何子元素

组合类型,有下述的的修饰符可以使用:

符号 用途 示例 示例说明
() 用来给元素分组 (古龙|金庸),(王朔|余杰) 分成两组
| 在列出的对象中选择一个 (男人|女人) 表示男人或者女人必须出现,两者至少选其一
+ 该对象必须出现一次或者多次 (成员+) 表示成员必须出现,而却可以出现多个成员
* 该对象允许出现0次或者多次 (爱好*) 爱好可以出现两次到多次
? 该对象必须出现0次或者1次 (菜鸟?) 菜鸟可以出现,也可以不出现,如果出现的话,最多只能出现一次
, 对象必须按指定的顺序出现 (西瓜,苹果,香蕉) 表示西瓜、苹果、香蕉必须出现,并且按这个顺序出现

例如:

<!ELEMENT 家庭 (人+,家电*)>
<!ELEMENT to  EMPTY>
<!ELEMENT body (#PCDATA)>

4、属性的定义:

<!ATTLIST 元素名称 
属性名称 类型 属性特点
属性名称 类型 属性特点
...... >

属性的类型:(1) CDATA (2) ID (3) IDREF/IDREFS (4) Enumerated (5) ENTITY/ENTITIES

(1)属性类型-CDATA,表示属性值可以是任何字符(包括中文和数字)

(2)属性类型-ID,表明该属性的取值必须是唯一的,但是属性的值不能是以数字开头!

(3)属性类型-IDREF/IDREFS

(4)属性类型-Enumerated,事先定义好一些值,属性的值必须在所列出的值的范围内。

(5)属性类型-ENTITY,实体

实体定义: 
- 实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。 
- 在DTD定义中,一条!ENTITY语句用于定义一个实体。 
- 实体可分为两种类型:引用实体和参数实体。引用实体是被XML文档应用的,而参数实体是被DTD文件本身应用的。

①引用实体:<!ENTITY 实体名称 "实体内容">

<!ENTITY copyright "I am a programmer">
....
&copyright;

②参数实体:<!ENTITY % 实体名称 "实体内容">

<!ENTITY % TAG_NAME "姓名|EMAIL|电话|地址">

<!ELEMENT 个人信息 (%TAG_NAME;|生日)>
<!ELEMENT 客户信息 (%TAG_NAME;|公司名)>

属性的特点:

(1) #REQUIRED,表示这个属性必须给,不给就报错 
(2) #IMPLIED,表示这个属性可以给也可以不给 
(3) #FIXED value,表示这个属性必须给一个固定的value值 
(4) Default value,表示这个属性如果没有值,就分配一个默认的value值

DTD实际案例:

DTD文件:

<!ENTITY AUTHOR "John Doe">
<!ENTITY COMPANY "JD Power Tools, Inc.">
<!ENTITY EMAIL "jd@jd-tools.com"> <!ELEMENT CATALOG (PRODUCT+)> <!ELEMENT PRODUCT
(SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
<!ATTLIST PRODUCT
NAME CDATA #IMPLIED
CATEGORY (HandTool|Table|Shop-Professional) "HandTool"
PARTNUM CDATA #IMPLIED
PLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"
INVENTORY (InStock|Backordered|Discontinued) "InStock"> <!ELEMENT SPECIFICATIONS (#PCDATA)>
<!ATTLIST SPECIFICATIONS
WEIGHT CDATA #IMPLIED
POWER CDATA #IMPLIED> <!ELEMENT OPTIONS (#PCDATA)>
<!ATTLIST OPTIONS
FINISH (Metal|Polished|Matte) "Matte"
ADAPTER (Included|Optional|NotApplicable) "Included"
CASE (HardShell|Soft|NotApplicable) "HardShell"> <!ELEMENT PRICE (#PCDATA)>
<!ATTLIST PRICE
MSRP CDATA #IMPLIED
WHOLESALE CDATA #IMPLIED
STREET CDATA #IMPLIED
SHIPPING CDATA #IMPLIED> <!ELEMENT NOTES (#PCDATA)>

对应的XML:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE CATALOG SYSTEM "product.dtd">
<CATALOG>
<PRODUCT NAME="康帅傅矿泉水" CATEGORY="Table" PARTNUM="" PLANT="Chicago">
<SPECIFICATIONS WEIGHT="" POWER="">这里是细节</SPECIFICATIONS>
<PRICE></PRICE>
<PRICE></PRICE>
</PRODUCT>
</CATALOG>

XML的DTD约束的更多相关文章

  1. 【JAVA与XML、dtd约束、Schema约束】

    一.XML. (1)XML:Extensible Markup Language (2)XML是一种标记语言. (3)XML的设计宗旨是传输数据,而不是显示数据. (4)XML标签没有被预定义,即使用 ...

  2. xml技术DTD约束定义

    XML约束 在XML技术中,可以编写一个文档来约束一个xml文档的书写规范,这称之为XML约束为什么需要XML约束? class.xml <stu><面积>?人怎么会有面积元素 ...

  3. XML内部DTD约束 Day24

    <?xml version="1.0" encoding="UTF-8"?> <!-- 内部DTD --> <!-- XML:ex ...

  4. XML、DTD约束

    XML的作用: xml现在主要用于配置文件 文档声明: 如果你使用记事本打开文档,此时如果记事本默认保存数据到硬盘根据的是"GB2312"编码,这个时候如果你在xml文档源码中en ...

  5. XML学习1 xml序言 dtd约束

  6. 2.xml约束技术----------dtd约束

    1.xml的约束 (1)为什么需要定义约束了 比如现在定义一个person的xml文件,只想要这个文件里面保存人的信息,比如name age等,但是如果在xml文件中写了一个元素<猫>,发 ...

  7. 【PHP XML与dtd概述【完整版】】

    一.XML文件简介 关于XML的大多数人都知道一些,HTML->xhtml->xml,这个顺序本来应当是HTML发展的顺序. XML可以当做配置文件使用,还可以充当小型的数据库. vers ...

  8. xml语法、DTD约束xml、Schema约束xml、DOM解析xml

    今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的ht ...

  9. XML约束——DTD约束

    参考: 方立勋老师的讲课视频.   什么是XML约束 •在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 为什么需要XML约束 常用的约束技术 •XML DTD • ...

随机推荐

  1. LaTeX使用titlesec宏包改变章节编号形式的方法

    1.titleformat宏包命令详解 LaTeX中可以用titlesec宏包中的titleformat命令来改变标题形式: 导入宏包: \usepackage{titlesec} 改变标题的代码如下 ...

  2. BeanUtils包的学习

    BeanUtils支持八种基本数据类型(int double short char byte float boolean long)的反射,对于日期需要提前注册DateLocalConvert获取转换 ...

  3. 典型的DIV CSS三行二列居中高度自适应布局

    如何使整个页面内容居中,如何使高度适应内容自动伸缩.这是学习CSS布局最常见的问题.下面就给出一个实际的例子,并详细解释.(本文的经验和是蓝色理想论坛xpoint.guoshuang共同讨论得出的.) ...

  4. MySQL用户管理语句001

    总的来说mysql的用户管理方法可以分为如下两种: 1.直接对mysql.user 表进行[insert | update | delete] + flush privileges 这种方式主要针对那 ...

  5. socket浅谈

    1什么是socket? socket的英文原义是“孔”或“插座”.作为进程通信机制,取后一种意思. 通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄. (其实就是两个程序通信用的.)是 ...

  6. C#中Split分隔字符串的应用(C#、split、分隔、字符串)

    转载地址 .用字符串分隔: using System.Text.RegularExpressions; string str="aaajsbbbjsccc"; string[] s ...

  7. netstat和telnet命令在Windows7中的用法(转载)

    在网络方面我们常常会用到如下命令: (1)ping命令:我们常常用来判断2台或2台以上的机器间是否网络连通. ping 192.168.1.88 -t 如果想看任何命令的参数是什么意思,我们只需要:命 ...

  8. iphone6闪存检测

    iPhone6自从发布以后一直又不少的诟病和非议,比如一机难求,容易掰弯,程序崩溃等, 甚至传出了苹果将要召回这些问题设备,最近有人终于查出了iPhone6安装大量程序后崩溃的原因,原因就是大容量的i ...

  9. What is NicEdit?

    NicEdit - WYSIWYG Content Editor, Inline Rich Text Application   What is NicEdit? NicEdit is a Light ...

  10. 了解SQL注入攻击

    SQL注入:利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,这是SQL注入的标准释义. 随着B/S模式被广泛的应用,用这种模式编写应用程序的程序员也越来越多,但由于开发人员的水 ...