DTD:文档类型定义,可以定义合法的XML文档构建模块。使用一系列的合法标签元素来定义文档的结构。

现有一个XML文档内容如下:

  

<?xml version="1.0"?>
<note>
<to>Luffy</to>
<from>John</from>
<heading>Reminder</heading>
<body>Hello World!</body>
</note>

DTD的三种引入方式:

  1.DTD文件位于XML源文件的外部,可通过以下格式引入外部的DTD文件:

  格式:

    <!DOCTYPE 根元素名称 SYSTEM "DTD文件路径">

  示例:

<!DOCTYPE note SYSTEM "note.dtd">

  2.DTD位于XML文件中:

  格式:

<!DOCTYPE 根元素名称 [元素声明]>

  示例:

<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Luffy</to>
<from>John</from>
<heading>Reminder</heading>
<body>Hello World!</body>
</note>

  3.可以直接使用外部的DTD文件(多为网络上以有的DTD文件),这总方式在以后学struts2框架中使用配置文件时会用到。

  格式:

<!DOCTYPE 根元素名称 PUBLIC "DTD名称" “DTD文档的URL”>

  示例:

<!DOCTYPE struts PUBLIC   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd">

使用DTD定义元素:在DTD文档中使用ELEMENT关键字来声明一个XML元素

  复杂元素:带有子元素的元素

  语法:

<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>

  示例:

<!ELEMENT note (to,from,heading,body)>

  简单元素:没有子元素

  语法:

<!ELEMENT 元素名称 约束>

  在定义复杂元素时,子元素列表定义一个元素,则只能出现一个子元素。若想出现多个则可以使用加号:+,星号:*,问号:?来表示出现的次数。其中,加号表示出现一次或者多次,问号表示零次或者一次,星号表示零次或者多次(任意次)。另外,在子元素列表中可以使用竖线:|     表示枚举列表中的一个值

  简单元素中常见约束如下:

    (#PCDATA)          表示元素名为字符串类型

    EMPTY                 元素为空(没有内容)

    ANY                      任意

  示例:

<!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)>

DTD属性:

使用ATTLIST进行声明

语法:

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

常见属性类型:
  CDATA: 字符串

  枚举 : 表示只能在一定的范围内出现值,但是只能每次出现其中的一个

  ID: 值只能是字母或者下划线开头

常见属性的约束:
  #REQUIRED:属性必须存在

  #IMPLIED:属性可有可无

  #FIXED: 表示一个固定值 #FIXED "AAA"
    属性的值必须是设置的这个固定值

<!ATTLIST color ID CDATA #FIXED "blue">

实体的定义:
  实体是用于定义用于定义引用普通文本或特殊字符的快捷方式的变量。

  实体引用是对实体的引用。

  实体可在内部或外部进行声明。

  内部实体声明:

  语法:

<!ENTITY 实体名称 "实体的值">

  示例:

<!ENTITY writer "大魔王">

  实体的使用:&实体名称;  (&+实体名称+;)

<author>&writer;</author>

  

  外部实体声明:

  语法:

<!ENTITY 实体名称 SYSTEM "URI/URL">

  示例:

<!ENTITY writer SYSTEM "https://www.cnblogs.com/fxxk/">

  使用:

<author>&writer;</author>

案例示范:

<?xml version="1.0" encoding="UTF-8"?>
<!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> ]> <TVSCHEDULE NAME="院线大片">
<CHANNEL CHAN="cctv-6">
<BANNER>动作片</BANNER>
<DAY>
<DATE>05-20</DATE>
<PROGRAMSLOT>
<TIME>19:0:0</TIME>
<TITLE>复仇者联盟</TITLE>
<DESCRIPTION>Hello World!</DESCRIPTION>
</PROGRAMSLOT>
</DAY>
</CHANNEL>
</TVSCHEDULE>

日期:2019-04-04

时间:22:21:43

  

  

  

JavaWeb学习日记----DTD的更多相关文章

  1. JavaWeb学习日记----XML基础

    1.XML基础: XML全称为eXtensible Markup Language;即可扩展标记型语言,同HTML一样使用标签来操作.它的可扩展性体现在标签可以由自己定义,可以是中文标签. XML用途 ...

  2. JavaWeb学习日记----表单提交方式

    1.表单提交方式 (1) 使用input控件中的submit提交 代码如下: <!DOCTYPE html> <html lang="en"> <he ...

  3. JavaWeb学习日记----XML的解析

    XML的解析简介: 在学习JavaScript时,我们用的DOM来解析HEML文档,根据HTML的层级结构在内存中分配一个树形结构,把HTML的标签啊,属性啊和文本之类的都封装成对象. 比如:docu ...

  4. JavaWeb学习日记----SAX解析XML

    1.SAX解析XML文档的方式: 与DOM方式解析不同,DOM方式解析是根据XML的层级结构在内存中分配一个树形结构,把xml的标签,属性和文本都封装成对象.优点是可以很方便实现增删改操作.缺点是,如 ...

  5. JavaWeb学习总结-04 Servlet 学习和使用

    一 Servlet 1 Servlet概念 Servlet时运行在服务器端的Java程序. Servlet的框架核心是 javax.servlet.Servlet 接口. 所有自定义的Servlet都 ...

  6. JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板

    [声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 一.http协议回顾: 在上一篇文章中:JavaW ...

  7. JavaWeb学习----JSP内置对象详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. JavaWeb学习----JSP脚本元素、指令元素、动作元素

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  9. (转)JavaWeb学习总结(十三)——使用Session防止表单重复提交

    如何防止表单重复提交 在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复 ...

随机推荐

  1. C语言向上、向下取整

    C语言有以下几种取整方法: 1.直接赋值给整数变量.如: int i = 2.5; 或 i = (int) 2.5; 这种方法采用的是舍去小数部分 2.C/C++中的整数除法运算符“/”本身就有取整功 ...

  2. 2017年7月最新浏览器市场份额,IE8份额仅剩个位数

    数据来源为百度统计所覆盖的超过150万的站点,样本为2017年6月1日-2017年6月30日最新一个月的数据. 统计如下: 其中IE8的份额为9.83%,首次降至个位数.在所有IE版本中,份额最高的是 ...

  3. [转]CSS clear both清除浮动

    DIV+CSS clear both清除产生浮动 我们知道有时使用了css float浮动会产生css浮动,这个时候就需要清理清除浮动,我们就用clear样式属性即可实现. 接下来我们来认识与学习cs ...

  4. html5 css选择器。 井号,句号的区别

    .理解CSS的样式组成CSS里的样式表是有规则组成的,每条规则有三个部分组成:1.选择器(如下面例子中的:“body”),告诉浏览器文档的哪个部分受规则影响:2.属性(如实例中的font-family ...

  5. [转] Vmware vs Virtualbox vs KVM vs XEN: virtual machines performance comparison

    http://www.ilsistemista.net/index.php/virtualization/1-virtual-machines-performance-comparison.html? ...

  6. Function Composition vs Object Composition

    In functional programming, we create large functions by composing small functions; in object-oriente ...

  7. C语言窗口例子

    #include <windows.h> LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ) ; //声明用来处理消息的函数 in ...

  8. 配置IDM不限速下载百度云的大文件

    IDM介绍Internet Download Manager(简称IDM)是一个用于Windows系统的下载管理器,它是共享软件,免费试用期为30天,但是每月均有一段时间优惠. IDM可以让用户自动下 ...

  9. UnicodeDecodeError:utf-8codeccantdecodebyte0xb9inposition0:invalidstartbyte

    相信这个问题大家都会以为是编码的问题,当然原本我也以为是编码问题! 然后试了各种方案!都是以失败告终!     哈哈哈,后来解决了,原来真是闹了个大笑话............         这是因 ...

  10. Memcached详解

    Memcached介绍 Memcached是什么? Free & open source, high-performance, distributed memory object cachin ...