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. 疑难杂症:Java中Scanner连续获取int和String型发生错误.

    使用Scanner类获取输入,连续获取int类型和String类型数据时候,发生错误. Scanner sc = new Scanner(System.in); System.out.println( ...

  2. 了解Serverless架构

    1 概述 Serverless中文译为“无服务”是一种新兴起的架构模式,公司ESB产品引入Rest微服务服务机制过程,笔者刚好参与其中,其中Serverless作为一个新起的概念,跟微服务架构相关,为 ...

  3. win10 系统下无法正常安装 Anaconda3

    最近国庆两天,突然心血来潮重装了一遍系统,重装成了win10系统以后毛病百出哇,昨天和今天一直在解决一个问题,那就是安装Anaconda3的时候出现不了快捷方式,如下图这样只有一个快捷方式(在win7 ...

  4. HTML学习一_网页的基本结构及HTML简介

    HTML网页的基本结构 ```angular2html<!DOCTYPE html> 声明为 HTML5 文档<html> 元素是 HTML 页面的根元素<head> ...

  5. 第51节:Java当中的集合框架Map

    简书作者:达叔小生 Java当中的集合框架Map 01 Map提供了三个集合视图: 键集 值集 键-值 映射集 public String getWeek(int num){ if(num<0 ...

  6. 第七篇: 消息总线(Spring Cloud Bus)

    Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控.本文要讲述的是用Spring Cloud Bus实现通知微服务 ...

  7. 一文搞懂 Linux network namespace

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 本文通过 IP ...

  8. 解决添加codova plugin 编译出现问题:Execution failed for task ':processDebugManifest'.

    问题背景: ionic3项目上,添加cordova-plugin-cszbar,编译运行在android平台上 ,结果编译不成功.出现以下问题. Element uses-feature#androi ...

  9. Spring框架(2)---IOC装配Bean(xml配置方式)

    IOC装配Bean (1)Spring框架Bean实例化的方式提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 下面先写这三种方法的applicat ...

  10. Android--UI之ViewStub

    前言 按照最近博客的路线,继续讲Android的UI开发.今天讲解一下ViewStub控件,惰性装载控件.在本篇博客中,将了解到ViewStub的常用属性.方法,以及注意事项.最后将以一个简单的Dem ...