XML--XML文件约束之dtd详解

原创 2018年04月16日 09:46:44
dtd:documenttype definition 文档类型定义

XML文件引入DTD文件,这样XML可以自定义标签,但又受到DTD文件的约束。

 

1、dtd文档的声明及引用

1.1内部dtd文档

<!DOCTYPE 根元素 [定义内容]>

1.2外部dtd文档

 

引入外部的DTD文档分为两种:

(1)当引用的DTD文件是本地文件的时候,用SYSTEM标识,并写上”DTD的文件路径”,如下:

<!DOCTYPE 根元素 SYSTEM "DTD文件路径">

(2)如果引用的DTD文件是一个公共的文件时,采用PUBLIC标识,如下方式:

<!DOCTYPE根元素 PUBLIC "DTD名称" "DTD文件的URL">

例:structs2约束

<!DOCTYPEstruts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">

2、元素定义

2.1 简单元素

<!ELEMENT NAMECONTENT>

其中:

- ELEMENT是关键字,是不能修改的

- NAME表示元素名称

- CONTENT是元素类型,必须要大写!CONTENT的内容有三种写法:

(1)EMPTY——表示该元素不能包含子元素和文本,但可以有属性。

(2)ANY——表示该元素可以包含任何在该DTD中定义的元素内容

(3)(#PCDATA)——可以包含任何字符数据,但是不能在其中包含任何子元素,只有这个有括号

2.2 复杂元素

<!ELEMENT元素名称 (子元素)>

关于组合类型,有下述的的修饰符可以使用:

符号

用途

示例

示例说明

()

用来给元素分组

(张三|李四),(王二|麻子)

分成两组

|

在列出的对象中选一个

(男人|女人)

男人或女人,必选其一

+

该对象必须出现一次或者多次

(成员+)

成员必须出现,且可以出现多个成员

*

该对象允许出现0次或者多次

(成员*)

成员可以出现任意次数,也可以不出现

该对象必须出现0次或者1次

(成员?)

成员可以不出现,出现则最多一次

 ,

对象必须按指定的顺序出现

(苹果,香蕉,葡萄)

必须按照苹果,香蕉,葡萄的顺序出现

 

3、属性定义

<!ATTLIST 元素名称

    属性名称类型 属性特点

    属性名称类型 属性特点...... 

> 


3.1 属性类型

(1) CDATA

(2) ID

(3) IDREF/IDREFS

(4) Enumerated

3.2 属性特点

(1) #REQUIRED,表示这个属性必须给,不给就报错

(2) #IMPLIED,表示这个属性可以给也可以不给

(3) #FIXED value,表示这个属性必须给一个固定的value值

(4) Default value,表示这个属性如果没有值,就分配一个默认的value值

 

3.3 详细解释

(1)属性类型-CDATA,表示属性值可以是任何字符(包括中文和数字)

<!ATTLIST学生

          姓名 CDATA#REQUIRED

> 
<学生 姓名="张三"/>

<学生 姓名="zhangsan"/>

<学生 姓名="3"/>

(2)属性类型-ID,表明该属性的取值必须是唯一的,但是属性的值不能是以数字开头!          

<!ELEMENT学生 ANY>

<!ATTLIST 学生

          学号 ID#REQUIRED

          姓名 CDATA #REQUIRED

> 
<学生 学号="15001" 姓名="张三"/>

<学生 学号="15002" 姓名="李思"/>

(3)属性类型-IDREF/IDREFS

- IDREF属性的值指向文档中其它地方声明的ID类型的值

- IDREFS同IDREF,但是可以具有由空格分开的多个引用。

<!ELEMENT 家庭(人+)>

<!ELEMENT 人 EMPTY>

<!ATTLIST 人

    relID ID #REQUIRED

    paraentID IDREFS #IMPLIED

    name CDATA #REQUIRED

> 
<家庭>

    <人 relID="P_1" name="爸爸"/>

    <人 relID="P_2" name="妈妈"/>

    <人 relID="P_3" parentID="P_1 P_2" name="儿子"/>

</家庭>

(4)属性类型-Enumerated,事先定义好一些值,属性的值必须在所列出的值的范围内。     

<!ATTLIST student

    性别(男|女) #REQUIRED

> 

4、实体定义

 

实体定义: 
- 实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。 
- DTD定义中,一条!ENTITY语句用于定义一个实体。 
- 实体可分为两种类型:引用实体和参数实体。引用实体是被XML文档应用的,而参数实体是被DTD文件本身应用的。

 

4.1引用实体

引用实体主要在XML文档中被应用

语法格式如下,引用实体的定义内容最好放在DTD文件的最后

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

引用方式:

&实体名称;

<!ENTITY identity  "I am a student">

....

&identity;

注:引用实体事末尾带分号

 

4.2参数实体

参数实体被DTD文件自身使用

语法格式为: 

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

引用方式为:

%实体名称 

<!ENTITY %TAG_NAME "姓名|EMAIL|电话|地址">

 

<!ELEMENT 个人信息 (%TAG_NAME;|生日)>

<!ELEMENT 学生信息 (%TAG_NAME;|学校)>

5、验证

https://www.w3cschool.cn/xml/xml-validator.html

 


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liu_tian_wei/article/details/79956483

xml文件中加入本地的dtd约束文件

首先,我是以加载Struts2的来演示: 1 我们可以看到,越是文件中的 显示的是PUBLIC, 即从网络中获取约束文件dtd ,此时我需要将其配置成从自己的本地来获取dit文件  首先,...
  • JJ_nan
  • JJ_nan
  • 2017-02-27 22:31:32
  • 1886

[Intellij idea配置外部DTD文件]

导入DTD约束文件错误 1. 打开file——Settings..(快捷键ctrl+alt+s); 2. 找到Languages&Frameworks——Schemas and DTDs圈”2” ...
  • qq_37977176
  • qq_37977176
  • 2017-11-29 08:49:39
  • 1325

MyEclipse手动添加DTD约束文档

1、拷贝http://struts.apache.org/dtds/struts-2.1.7.dtd地址 2、MyEclipse的window、preferences,搜索XML Catelog ...
  • xuxiaocheng1
  • xuxiaocheng1
  • 2013-10-08 16:57:27
  • 2259

Java Web Xml的DTD约束

DTD:Document Type Definition 文档类型定义,简单的说,DTD说明文档结构,比如每一个元素的子层级具体都包含哪些子元素xuhaitao01.dtd ...
  • qq_15267341
  • qq_15267341
  • 2016-08-07 19:54:21
  • 1145

mybatis-dtd约束文件

  • 2016年10月22日 09:24
  • 3KB
  • 下载

mybatis的dtd约束文件及配置文件xml自动提示

一、mybatis的dtd约束文件位置我使用的是mybatis-3.2.7这个版本的mybatis,里面的核心jar包是:mybatis-3.2.7.jar,将这个jar包解压缩后进入\org\apa...
  • a15920804969
  • a15920804969
  • 2018-01-19 16:06:58
  • 823

hibernate-dtd-xsd约束文件

  • 2017年01月23日 14:55
  • 18KB
  • 下载

如何.xml文件中引入.dtd文件约束

以mybatis.xml文件为例,其它类似。首先找到自己的.xml文件的dtd文件下载地址,一般在生成的xml文件上面有。然后复制下来。 按照以下步骤,点击Eclipse的Window 选择P...
  • hdg745979749
  • hdg745979749
  • 2017-07-09 21:56:50
  • 1010

eclipse导入hibernate 的DTD 文件

eclipse导入hibernate 的DTD 文件 用解压的方式打开 ---找到DTD文件:-----解压 Eclipse 导入DTD文件  - preference—xml—xml ...
  • qi95719
  • qi95719
  • 2016-09-10 15:19:47
  • 5676

intellij idea配置外部dtd文件

打开file——Settings..(快捷键ctrl+alt+s); 找到Languages&Frameworks——Schemas and DTDs 右侧的External Schema...
  • u012181236
  • u012181236
  • 2015-03-19 12:25:00
  • 7842
收藏助手
不良信息举报
您举报文章:XML--XML文件约束之dtd详解
举报原因:
原因补充:

(最多只允许输入30个字)