DTD:Document Type Definition

  DTD是一种简单的XML约束模式语言

  DTD文档必须以utf-8或unicode编码

  注释方式与HTML、XML文档相同

DTD文档的引用:紧跟XML声明语句之后,有两种方式(外部引入及内部嵌入)

<?xml ... standalone="no"?>
<!DOCTYPE ...>

外部引入DTD方式:

有如下两种引用方式:第一种方式为引用本地DTD文件,第二种为公共DTD文件方式(doctype-name一般使用根元素命名)

 <!DOCTYPE doctype-name SYSTEM "dtd-url">
<!DOCTYPE doctype-name PUBLIC "dtd-name" "dtd-url">

内部嵌入DTD方式:

 <!DOCTYPE doctype-name [
... ...
]>

一个简单的DTD文档如下:

1 <!ELEMENT bookshelf(book+)>
2 <!ELEMENT book(name,author,price)>
3 <!ELEMENT name(#PCDATA)>
4 <!ELEMENT author(#PCDATA)>
5 <!ELEMENT price(#PCDATA)>

DTD元素定义

  <!ELEMENT 元素名称 使用规则>

使用规则如下:

EMPTY: 定义空元素

ANY: 任何形式

(#PCDATA): 普通文本

(<ELE1> <ELE2> <ELE3> ...): 无序元素组

(<ELE1>,<ELE2>,<ELE3> ...): 有序元素组(要求子元素必须以<ELE1>、<ELE2>、<ELE3>...的顺序出现)

(<ELE1>|<ELE2>|<ELE3> ...): 仅一个元素

其中后三种中元素后可以添加通配符(+:出现一次或多次;?:出现0次或一次;*:0或多次;什么都没有表示有且仅有一次)

如:<!ELEMENT MYFILE ((TITLE*, AUTHOR?,EMAIL)*|COMMENT)>

DTD属性定义

<!ATTLIST 元素名称

Att1 属性类型 设置说明

...

>

属性类型如下:

CDATA:字符串

ENUMERATED

ID

...

设置说明如下:

#REQUIRED: 必须设置

#IMPLIED: 可有可无

#FIXED "fixed": 固定值

"default":设置默认值

如:<!ATTLIST Meat kind(chicken|beaf|fish|...) "fish">

DTD实体定义

实体:即是为一段文本起别名,方便在XML中或DTD中随时引用。分为引用实体和参数实体。

引用实体在XML中的引用方式为:&实体名;

  <!ENTITY 实体名 "内容">

  <!ENTITY 实体名 SYSTEM "外部XML的URL">  <!-- 将外部XML内容作为实体 -->

参数实体在DTD中的引用方式为:%实体名;

  <!ENTITY %实体名 "内容">

例如:

  <!ENTITY %TAG "name|email|telephone|address">

  <!ELEMENT Info (%TAG;|birthday)>

参数实体就是进行严格地替换,可以简化元素、属性的定义

DTD简单使用的更多相关文章

  1. XML学习笔记2——DTD

    在上一篇笔记中,将文档类型分类时,曾经根据文档是否使用并遵守了DTD或Schema来区分为格式良好的XML和有效的XML,那么什么是DTD和Schema呢?DTD和Schema都是用来规范XML文档的 ...

  2. 04_XML_03_XMLDTD约束与校验

    [什么是XML约束] 在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,称之为XML约束. 常见的XML约束技术有:XML DTD和XML Schema DTD(Document Typ ...

  3. html学习一(html简史及doctype)

    html3部分 doctype(html) dtd head body 一.深入浅出HTML与XHTML的区别 HTML(HyperText Markup Language,超文本标记语言)最早的HT ...

  4. XML和DTD的简单介绍和入门

    XML(Extensible Markup Lanaguage),可扩展标记语言,是标准通用标记语言(Standard Generalized Markup Language, SGML)的一个子集, ...

  5. XML文件基础,DTD校验文件编写,Schema文件的简单使用

    dtd <!-- <!ELEMENT 元素(子元素,...)> --> <!ELEMENT students (student+,cat*) > <!ELEM ...

  6. 搭建一个简单的mybatis框架

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  7. Spring+SpringMVC+Hibernate简单整合(转)

    SpringMVC又一个漂亮的web框架,他与Struts2并驾齐驱,Struts出世早而占据了一定优势,下面同样做一个简单的应用实例,介绍SpringMVC的基本用法,接下来的博客也将梳理一下Str ...

  8. php静态缓存简单制作

    制作缓存的目的是为了让我们的页面运行更加快速,减少读取数据库内容的次数,给用户更好的体验,为此我们可以使自己的程序做一下缓存,并且设置一个缓存过期的时间,来保证与数据库的一致,当然并不是所有的程序都适 ...

  9. Hibernate(二)__简单实例入门

    首先我们进一步理解什么是对象关系映射模型? 它将对数据库中数据的处理转化为对对象的处理.如下图所示: 入门简单实例: hiberante 可以用在 j2se 项目,也可以用在 j2ee (web项目中 ...

随机推荐

  1. PHPCMS二层栏目调用

    {pc:content action="category" catid="0" num="25" siteid="$siteid& ...

  2. Linq/EF/lambda Group by/Order by 多个字段详细用法

    1)单个字段Group by: //a.Key类型与a.Province字段类型一样  .GroupBy(a => a.Province).Select(a => a.Key).ToLis ...

  3. linux中ls、ls -l、ls -al、ll命令

    ls只是简单的列出目录下文件名,ll更加详细的列出了文件的类型.文件所有者权限.文件所有者组权限.文件大小.文件最后修改时间,etc... 我们可以用一个简单的图来说明,如下图1: 图1 1.第一位就 ...

  4. 劫持Disucz系列密码

    目标文件:/source/class/class_member.php 找到: if($result['status'] > 0) 前面加入: $log_file = "./data/ ...

  5. Flip Game

    http://poj.org/problem?id=1753 #include<cstdio> #include<algorithm> #include<string.h ...

  6. 我的VSTO之路(四):深入介绍Word开发

    原文:我的VSTO之路(四):深入介绍Word开发 在上一篇文章中,我介绍了Word的对象模型和一些基本开发技巧.为了更好的介绍Word插件开发,我为本文制作了一个Word书签的增强版,具体功能是让用 ...

  7. Java NIO API详解

    在JDK 1.4以前,Java的IO操作集中在java.io这个包中,是基于流的同步(blocking)API.对于大多数应用来说,这样的API使用很方便,然而,一些对性能要求较高的应用,尤其是服务端 ...

  8. hdu-1890-Robotic Sort splay区间翻转

    题意: 依次找第i大的数下标pos[i],然后将区间[i,pos[i]]翻转 分析: splay树区间翻转 // File Name: ACM/HDU/1890.cpp // Author: Zlbi ...

  9. 【贪心】Vijos P1615 旅行

    题目链接: https://vijos.org/p/1615 题目大意: N条路,路的高度给你,走一条路的耗费体力是从上一条路的高度到当前路高度的绝对值差. 可以改变一条路的高度,耗费的体力等于改变前 ...

  10. c++学习(1)

    c++学习(1) 1.const C VS C++: 在c语言中const是一个只读变量(ReadOnly Varible),在c++中const只是代表常量(Constant). 例: const ...