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. Postman导出Api文档

    一.最近离职要把做搞过的接口整理成文档,查了查postman好像不支持导出文档,于是写了个工具类,供大家参考! 前提你要先把postman里的接口导出来 如图: 二.所用到的包(主要Json相关的包) ...

  2. spring 装配

    spring 3种装配方式: 支持混合配置:不管使用JavaConfig还是使用XML进行装配,通常都会创建一个根配置(root configuration), 这个配置会将两个或更多的装配类和/或X ...

  3. docker 1 (ubuntu docker install)

    1.移除旧内核模块 sudo apt-get remove docker \ docker-engine \ docker.io 2. 添加https传输包 sudo apt-get update s ...

  4. How To Setup a CA

    How To Setup a CA Original Version by Ian AldermanUpdated by Zach Miller Introduction You can set up ...

  5. Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)

    Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁.偏向锁) Java 并发编程 ...

  6. 包建强的培训课程(17):Java代码敏捷之道

    第1讲 千言万语聊注释 按图索骥 奇葩注释“赏析” Git提交的学问 第2讲 RxJava:函数式编程 从一只猫的故事说起 背压 第3讲 代码瘦身 抽象相同逻辑的代码 查找相似代码 AOP一瞥 第4讲 ...

  7. 仿今日头条app手机端顶部触屏滑动导航

    swiper.js <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  8. 吴恩达机器学习笔记23-神经网络:表述--非线性假设(Non-linear Hypotheses)

    我们之前学的,无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时,计算的负荷会非常大.下面是一个例子: 当我们使用

  9. hadoop基础与实践--流程解惑

    看过好多本hadoop的书,对整个过程始终存在一些疑问,今天终于搞清楚了.立个low-flag. 整体架构好复杂的感觉?其实不复杂 整体架构,namenode/metanode负责维护所有的元数据,d ...

  10. git提示error setting certificate verify locations以及fatal: unable to access 的解决办法

    z当使用git ------上传文件到GitHub上时!~~~出现了以下错误  :fatal: unable to access ' 可以采用以下解决方式: 修改GitHub上的地址格式=====ht ...