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. 《JavaScript 高级程序设计》读书笔记三 基本概念

    一   语法 区分大小写,驼峰式书写方式: 严格模式:“use strict”: 二  数据类型 a. 基本数据类型: undefined 声明变量未初始化 null 空指针,可以释放内存 Boole ...

  2. [转] KVM I/O slowness on RHEL 6

    KVM I/O slowness on RHEL 6 http://www.ilsistemista.net/index.php/virtualization/11-kvm-io-slowness-o ...

  3. 【安全开发】浅谈JSP安全开发之XSS

    前言     大家好,好男人就是我,我就是好男人,我就是-0nise.在各大漏洞举报平台,我们时常会看到XSS漏洞.那么问题来了,为何会出现这种漏洞?出现这种漏洞应该怎么修复?目录     1.XSS ...

  4. 虚拟机安装ssh,关闭防火墙

    输入命令:sudo apt-get install openssh-server        安装ssh 安装完成后,开启服务 sudo /etc/init.d/ssh start 之后使用如下命令 ...

  5. Numpy学习四:numpy.power()用法

    numpy.power(n, x) 对数组n的元素分别求x次方.x可以是数字,也可以是数组,但是n和x的列数要相同.

  6. 第86节:Java中的JQuery基础

    第86节:Java中的JQuery 前言复习 定时器: setInterval clearInterval setTimeout clearTimeout 显示: img.style.display ...

  7. Java数据库操作(MySQL与SQLserver)

    在java编程开发中,数据库的开发是重头戏. MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品: SQL Server是由Microsoft开发 ...

  8. C/C++结构体成员偏移量获取

    分析代码节选自muduo. 以下代码通过offsetof获取sin_family在sockaddr_in6中的字段偏移量. static_assert(offsetof(sockaddr_in6, s ...

  9. SQLServer脚本编写

    临时接到通知,需要临时编写一个SQL Server的脚本,供出差的同事使用一下. 我当时心想这个SQL Server脚本听都没听说过,但是组织说决定就是你了,那我就只能硬着头皮上了. 脚本实现的功能比 ...

  10. 机器学习(Machine Learning)算法总结-K临近算法

    一.算法详解 1.什么是K临近算法 Cover 和 Hart在1968年提出了最初的临近算法 属于分类(classification)算法 邻近算法,或者说K最近邻(kNN,k-NearestNeig ...