DTD(Document Type Definition),全称为文档类型定义。

文件清单:book.xml

<?xml version="1.0" ?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
<书>
<书名>Java就业培训教程</书名>
<作者>张孝祥</作者>
<售价>39.00元</售价>
</书>
<书>
<书名>JavaScript网页开发</书名>
<作者>张孝祥</作者>
<售价>28.00元</售价>
</书>
</书架>

文件清单:book.dtd

<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>

验证XML的有效性

IE5以上浏览器内置了XML解析工具:Microsoft.XMLDOM,开发人员可以编写javascript代码,利用这个解析工具装载xml文件,并对xml文件进行dtd验证。

var xmldoc = new ActiveXObject("Microsoft.XMLDOM");//创建xml文档解析器对象
xmldoc.validateOnParse = "true";//开启xml校验
xmldoc.load("book.xml");//装载xml文档
//获取错误信息
xmldoc.parseError.reason;
xmldoc.parseError.line;

DTD约束文档可以在XML文档中直接定义,也可以作为单独的文档进行编写(单独的文档必须以UTF-8编码进行保存) 。

在XML文档中编写DTD示例

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 书架 [
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
]>
<书架>
<书>
<书名>Java就业培训教程</书名>
<作者>张孝祥</作者>
<售价>39.00元</售价>
</书>
...
</书架>

引入外部DTD文档

XML使用DOCTYPE声明语句来指明它所遵循的DTD文档,有两种形式:

当引用的DTD文档在本地时,采用如下方式: <!DOCTYPE 根元素 SYSTEM “DTD文档路径”> 如:<!DOCTYPE 书架 SYSTEM “book.dtd”>

当引用的DTD文档在公共网络上时,采用如下方式: <!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文档的URL”> 如:<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

DTD元素定义

语法如下:

<!ELEMENT 元素名称 元素类型>

元素类型:

(#PCDATA):指示元素的主体内容只能是普通的文本.(Parsed Character Data)

EMPTY:用于指示元素的主体为空。比如<br/>

ANY:用于指示元素的主体内容为任意类型。

(子元素):指示元素中包含的子元素

对于子元素

----可以定义子元素的名称,比如:

<!ELEMENT 元素名称 (子元素1,子元素2,子元素3)> 表示3个子元素只能出现一次,并且按照此顺序出现;

<!ELEMENT 元素名称 (子元素1|子元素2|子元素3)> 表示3个子元素中只能出现一个;

我们还可以定义子元素的个数,比如:

(1)+:1次或多次;比如 (name+)表示此name元素只能出现1次或多次。

(2)?:0次或1次;比如(name?)表示此name元素只能出现0次或1次。

(3)*:0次或多次;比如(name*)表示此name元素任意出现几次。

(4)无:只能一次;比如(name)表示此name元素只能出现1次。

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

DTD属性定义

<!ATTLIST 标签名

属性名1        属性类型        属性说明

属性名2        属性类型        属性说明

>

例如:

<!ATTLIST 商品

   类别 CDATA #REQUIRED

   颜色 CDATA #IMPLIED >

对应的XML为:<商品 类别=“服装” 颜色=“黄色”/>

属性类型可以是

(1)CDATA:最普通的字符串;

(2)ENUMERATED (DTD没有此关键字),表示枚举,即(值1|值2|值3),需要括号,只能在其中选择一个值

(3)ID:属性值需要以字母或下划线开头,取值不能重复;

属性说明可以是

(1)#REQUIRED:必须设置;

(2)#IMPLED:可选值,表示该属性可有可无;

(3)#FIXED:固定值,通常语法为:#FIXED  "固定值"

(4)直接值:表示属性的取值为该默认值

定义属性示例

<!ATTLIST 页面作者
姓名 CDATA #IMPLIED
年龄 CDATA #IMPLIED
联系信息 CDATA #REQUIRED
网站职务 CDATA #FIXED "页面作者"
个人爱好 CDATA "上网"
>
<?xml version = "1.0" encoding="GB2312" standalone="yes"?>
<!DOCTYPE 购物篮 [
<!ELEMENT 肉 EMPTY>
<!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">
]>
<购物篮>
<肉 品种="鱼肉"/>
<肉 品种="牛肉"/>
<肉/>
</购物篮>
<?xml version = "1.0" encoding="GB2312" ?>

<!DOCTYPE 联系人列表[
<!ELEMENT 联系人列表 ANY>
<!ELEMENT 联系人(姓名,EMAIL)>
<!ELEMENT 姓名(#PCDATA)>
<!ELEMENT EMAIL(#PCDATA)>
<!ATTLIST 联系人 编号 ID #REQUIRED>
]>
<联系人列表>
<联系人 编号=“a">
<姓名>张三</姓名>
<EMAIL>zhang@it315.org</EMAIL>
</联系人>
<联系人 编号=“b">
<姓名>李四</姓名>
<EMAIL>li@it315.org</EMAIL>
</联系人>
</联系人列表>

DTD实体定义

定义实体就是为一段内容指定一个名称,使用时通过这个名称就可以引用其所代表的内容。

在DTD文档中使用ENTITY关键字来声明一个实体。

实体可分为:引用实体和参数实体,两者的语法不同

定义引用实体

概念:在DTD中定义,在XML中使用

语法:<!ENTITY 实体名称 “实体内容”>

引用方式(注意是在XML中使用):&实体名称;  注意:最后的“;”一定需要

DTD中定义:
<!ENTITY copyright "思梦科技">
XML中引用:
&copyright;

定义参数实体(了解)

概念:在DTD中定义,在DTD中使用

语法:<!ENTITY % 实体名称 “实体内容”>

引用方式(注意是在DTD中使用):%实体名称;

DTD中定义:
<!ENTITY % TAG_NAMES "姓名|EMAIL|电话|地址">
DTD中引用:
<!ELEMENT 个人信息 (%TAG_NAMES;|生日)>
   <!ELEMENT 客户信息 (%TAG_NAMES;|公司名)>

根据XML自动生成DTD

因为一般我们写的XML基本都是没有DTD的,如果要自己写DTD,又很麻烦,因此我们可以通过工具来自动生成:trang

功能:能够完成如下转换:

(1)XML ---> DTD

(2)XML --->XSchema

(3)DTD--->XSchema

使用方法:

java -jar trang.jar -I xml -O dtd input.xml output.dtd 即可;

-I xml 表示输入为xml;

-O dtd表示输出为dtd文件;

input.xml表示输入文件;

output.dtd表示输出文件;

XML中的DTD语法的更多相关文章

  1. 【HTML/XML 9】XML中的DTD文件

    导读:DTD是Document type definition(文档类型定义的缩写),是一套关于标记符的语法规则,它是XML文件的验证机制,数以XML文件的组成部分.XML文档是一种描述标记语言的语言 ...

  2. 10.IDEAD 的xml中配置DTD

    此时发现最后一行已经变成绿色就说明可以了,有提示了

  3. XML中的XPATH和DTD

    大家好,乐字节小乐又来了,上次给大家说道的是XML解析,这次接着讲述XML文档中的语言:XPATH.DTD 一.先来说说XPATH 1.XPATH 概念 XPath 是一门在 XML 文档中查找信息的 ...

  4. XML中DTD,XSD的区别与应用

    XML我们并不陌生,在企业级应用中有很广的用途.具体就不再说,下面介绍一下DTD,XSD的区别并以XSD为例看spring中定义与使用.1.DTD(Documnet Type Definition)D ...

  5. 【代码笔记】XML深入学习:DTD约束与DTD语法(2)

    DTD语法之定义实体(了解即可) 实体分为一般实体和参数实体. 定义实体:定义变量 引用实体:使用变量 一般实体:定义实体在DTD中,实体引用在xml中. 参数实体:定义实体在DTD中,实体引用在DT ...

  6. 【代码笔记】XML深入学习:DTD约束与DTD语法(1)

    2015-12-27 文件名    student.xml <?xml version="1.0" encoding="GB2312" standalon ...

  7. XML DTD语法详解

    XML DTD详解   XML DTD详解 前情提要与本文内容介绍 前面的两篇XML相关博文: 第一篇是介绍格式正规的XML: 格式正规的XML:语法 属性 实体 处理指令 样式单 CDATA节 第二 ...

  8. XML中的DOCTYPE属性

    一.先来两个小例子 内部dtd将standalone设为真. <?xml version="1.0" standalone="yes"?> < ...

  9. XML的约束(dtd)

    DTD(Document Type Definition),文档类型定义,DTD文件应使用UTF-8或Unicode   1.XML中有多少个元素,就在dtd文件中写几个 <!ELEMENT&g ...

随机推荐

  1. ABAP术语-Object Type

    Object Type 原文:http://www.cnblogs.com/qiangsheng/archive/2008/03/06/1093159.html Description created ...

  2. 爬虫——GET请求和POST请求

    urllib.parse.urlencode()和urllib.parse.unquote() 编码工作使用urllib.parse的urlencode()函数,帮我们将key:value这样的键值对 ...

  3. 【linux运维递进】

    ================================云计算和虚拟化=================================== docker openstack svn git ...

  4. MySQL数据库操作(DDL)

    一.创建数据库 语法:create database 数据库名称 [库选项]; 库选项:(可选)数据库的属性,一般有字符集与校对集,保存在数据库所属文件夹下的opt文件 charset:字符集,表示该 ...

  5. 【Hbase二】环境搭建

    此笔记仅用于作者记录复习使用,如有错误地方欢迎留言指正,作者感激不尽,如有转载请指明出处 Hbase环境搭建 Hbase环境搭建 hadoop为HA的Hbase配置 Zookeeper集群的正常部署并 ...

  6. GDOI DAY1游记

    今天,是本蒟蒻的第一次参加GDOI,真激动! 今天,是GDOI第一天,昨天熬夜打代码,今天早上状态十分不好,于是... 进入了考场,叫我们自由打一会代码,于是...打了一坨AC机,重要的是错了(额.. ...

  7. python2.7入门---file(文件)&OS 文件&目录方法

        首先file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数: 序号 方法及描述 1 file.close() 关闭文件.关闭后文件不能再进行读写操作. 2 file.f ...

  8. MySQL共享表空间扩容

    一.什么是共享表空间和独占表空间 共享表空间以及独占表空间都是针对数据的存储方式而言的. 共享表空间: 某一个数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在data目 ...

  9. Git使用之二:下载远程代码到本地指定文件夹

    一.前期工作: 1.准备好本地的文件夹 2.如果后期需要继续以该文件夹进行同步的,则需要配置该文件夹,方法请参考之前的  Git使用之一:创建仓储和提交文件 二.用clone(克隆方式下载) 在本地下 ...

  10. Moodle 3.4中添加小组、大组、群

    Moodle在高中应用时经常要用到年级.班级和小组,我们可以用群.大组.小组来代替. 小组设置:网站首页-->现有课程-->右上角的设置按钮-->更多-->用户-->小组 ...