无废话XML--XML约束(DTD)

  • 基本术语

    一、序言Prolog:包括XML声明(XML Declaration)和文档类型声明(Document Type Declaration)。

二、良构(well-formed 规范的):符合W3C定义的XML文档。

  • 为什么XML需要验证?  

 对XML文件施加额外的约束,以便交流。举个例子:要是我和你在交互一份数据,那么按照我的主管意识我可能会这样子定义,按照你的主观意识你可能会那样子定义,那么我们之间要怎么交互数据呢?没有一个提前规定号的约定来规范我们如何写XML,那么就连这份XML的解析估计都是问题了吧,那还交互个毛线呀。

XML有2种约束:1,DTD     2,schema。

  • DTD验证

文档类型定义(Document Type Definition)。    DTD定义了XML文档内容的结构,保证XML以一致的格式存储数据。精确的定义词汇表,对XML的内容施加约束。    符合DTD的规范XML文档称为有效的文档。由DTD定义的词汇表以及文档语法,XML解析器可以检查XML文档内容的有效性。    规范的XML文件不一定是有效的;有效的一定是规范的。

1、 DTD声明

1) DTD声明可以在单独的一个文件中

2) DTD声明可以内嵌在XML文件中

3) DTD声明可以一部分在单独的文件中,另一部分内嵌在XML文件中

2、 引入外部DTD文件。DOCTYPE有2种情况:

1),当引用的文件在本地时:

    
<!DOCTYPE 根节点名称 SYSTEM "dtd文件路径">

2),当引用的文件是一个公共的文件时:实际中这种情况比较多见的。

<!DOCTYPE
根节点名称 public "DTD名称" "DTD文件的URL">

比如我们在写一个JSP,前面都有这个文档定义的。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

3、 DTD四种标记声明    元素(ELEMENT)、属性(ATTLIST)、实体(ENTITY)、符号(NOTATION)

1) 元素(ELEMENT) XML元素类型声明

声明元素: <!ELEMENT elementName (contentModel)>

元素的内容通过内容模式来描述。

DTD 内容模式的种类有:

EMPTY   元素不能包含任何数据,但可以有属性(前提是必须声明其属性)。

不能有子元素。不能有文本数据(包括空白,换行符)。

DTD中定义: <!ELEMENT elementName EMPTY>

XML中:<elementName/>(推荐) 或者:<elementName></elementName>

(#PCDATA) 规定元素只包含已析的字符数据,而不包含任何类型的子元素的内容类型。

DTD中定义: <!ELEMENT student (#PCDATA)>

XML中合法内容: <student>watching TV</student>

(Elements) 元素由内容模式部件指定。

<!ELEMENT  name  (child particles) >

内容模式部件可以是下表列出的内容。

<!ELEMENT name (a,b)>  子元素a、b必须出现,且按照列表的顺序

<!ELEMENT name (a|b)>  选择;子元素a、b只能出现一个

<!ELEMENT name (a)  >  子元素a只能且必须出现一次

<!ELEMENT name (a)+ >  子元素a出现一次或多次

<!ELEMENT name (a)* >  子元素a出现任意次(包括零次、一次及多次)

<!ELEMENT name (a)? >  子元素a出现一次或不出现

Mixed    混合模式:子元素中既可有文本数据又可有下级子元素。

<!ELEMENT rn (#PCDATA| an | en)*>“|”和“*”必须写。

上句表示在 rn 内,字符数据 或 en及an 可以出现任意多次,顺序不限。

优先写(#PCDATA)  如:(#PCDATA|name)* 正确   (name|#PCDATA)* 错误

ANY     元素可以包含任何类型的数据。子元素(必须在DTD中有定义) 和 文本数据(包括空白)。

DTD中定义: <!ELEMENT a ANY> <!ELEMENT b ANY>

XML中合法内容: <a>somngthing</a> 或者 <a/> 或者 <a><b>oo</b></a>

2) 属性(ATTLIST) 特定元素类型可设置的属性&属性的允许值声明

<!ATTLIST elementName

attributeName1 attributeType attributeDefault

.......

attributeNameN attributeType attributeDefault>

属性类型 (Attribute Type):

CDATA该属性只能包含字符数据(注意与CDATA段、PCDATA的区别)

NMTOKEN  是CDATA的子集,它的字符只能是字母,数字,句点,破折号,下划线或冒号。

NMTOKENS 类似NMTOKEN,但这个可以包含多个值,每个值之间用空格隔开。

ID       该属性的取值在同一文档内是唯一的。一个元素只能有一个ID类型的属性。

IDREF    类似指针,指向文档中其他地方声明的ID值。如果该属性取值和指向的ID值不匹配,则返回错误。

IDREFS   类似IDREF,但它可以具有由空格分隔开的多个引用。

ENTITY   该属性的值必须对应一个在文档内部声明的但还没有分析过的实体。

ENTITYS  类似ENTITY,但它可以包含由空格分隔开的多个实体。

NOTATION 该属性的值必须引用在文档中其他地方声明的某个注释的名称。

(enumerated) 类似枚举的变量,该属性必须匹配所列的值。各值用“|”分隔开。

如: (春|夏|秋|冬) 实际内容文档只能从中取一个。

属性特性 (Attribute Default) :

#REQUIRED   必须有且只能有一个属性。

#IMPLIED    可有可无。

#FIXED      在DTD中定义默认值,XML中可以不指定,指定则必须等于该默认值。

attribute-value 如果不指定则用DTD定义的默认值,指定则用指定的值。

<![CDATA[############ 属性(ATTLIST)的举例 ############## ]]>

例一(#REQUIRED)

DTD中: <!ELEMENT el (#PCDATA)> <!ATTLIST el at1 NMTOKENS #REQUIRED  at2 CDATA #REQUIRED>

XML中,正确: <el at1 = "10 20"   at2="10" >something</el>

XML中,错误: <el at="10">something</el>  (没有写另一个#REQUIRED的属性 at2 )

例二(#IMPLIED,#FIXED)

DTD中: <!ELEMENT el (#PCDATA)> <!ATTLIST el at CDATA #FIXED "10"  at2 CDATA #IMPLIED >

XML中,正确: <el   at2="20" >something</el> (at有默认值"10",at2 可写可不写)

XML中,错误: <el at="11" >something</el>(at要么不写,要写只能写成跟默认值相同的)

例三(attribute-value)

DTD中:<!ELEMENT el (#PCDATA)> <!ATTLIST el at CDATA "10" at2 CDATA "20" >

XML中,正确: <el at="11" >something</el>

例四(enumerated + attribute-value)

DTD中:<!ELEMENT el (#PCDATA)> <!ATTLIST el at (10|20|30) "10">

XML中,正确: <el at="20">something</el>  (at要么不写,默认值 10;要么在(10|20|30)中选一个写)

<![CDATA[############ 属性(ATTLIST)举例 完毕 ############## ]]>

3) 实体(ENTITY)   可重用的内容声明

在DTD中定义 <!ENTITY 实体标志 "实体内容">

在xml中引用自定义的实体,用  &实体标志;  代表实体内容。

4) 符号(NOTATION) 不要解析的外部内容的格式声明。

3、 内部实体:在xml文件里面写(少用)。    外部实体:另外在xml同一文件夹下建立一个dtd文件(提倡)

外部的:以下是XML:

 <?xml  version="1.0"  encoding="UTF-8" standalone="no"?>
      <!DOCTYPE root SYSTEM "goodsInfo.dtd"><!--用这句引用外部dtd-->
      <root><goodsInfo>
          <goodsName>goodsName</goodsName>
          <goodsPrice>goodsPrice</goodsPrice>
      </goodsInfo></root>

以下是名为"goodsInfo.dtd"文件:

 <!ELEMENT root   (goodsInfo)>
      <!ELEMENT goodsInfo  (goodsName,goodsPrice)>
      <!ELEMENT goodsName  (#PCDATA)>
      <!ELEMENT goodsPrice (#PCDATA)>

内部的:

 <?xml  version="1.0"?>
      <!DOCTYPE root [
          <!ELEMENT root(student)>
          <!ELEMENT student (#PCDATA)>
          <!ENTITY CCTV  "中央电视台">
      ]>  <!--把DTD文件写在体内-->
      <root><student>
          student watch &CCTV;<!--使用自定义实体 CCTV-->
      </student></root>

时间: 2024-10-08 10:29:31

无废话XML--XML约束(DTD)的相关文章

xml介绍 约束 解析

今天内容 1.xml介绍 2.xml约束 3.xml解析 以上内容可以看懂,理解 4.贪吃蛇(补充)------------------------------------------------ 1.xml xml:可扩展的标记语言. xml作用:用于存储与传输数据. xml与html区别 ? XML 不是 HTML 的替代.-----xml对应xlst 相当于css于html ? XML 和 HTML 为不同的目的而设计: ? XML 被设计为传输和存储数据,其焦点是数据的内容. ? HTM

XML(二)之DTD——XML文件约束

前面介绍了XML的作用和基本的格式,今天我给大家分享的是关于XML的约束.废话不多说,我们直接来正题! 一.DTD简介 1.1.DTD概述 DTD(Document Type Definition,文档类型定义) 1)DTD是一套关于标记符的语法规则.它是XML1.0版规格的一部分,是XML文件的验证机制,属于XML文件组成的一部分. 2)XML文件提供应用程序一个数据交换的格式,DTD正是让XML文件能够成为数据交换的标准,因为不同的公司只需定义好标准的DTD, 各公司都能够依照DTD建立XM

xml语法、DTD约束xml、Schema约束xml、DOM解析xml

今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的html语言,html是超文本标记语言,使用html语言规定好的标签来封装文本数据.而html使用的标签html语言规定好的,每个标签都有自己特定的功能. xml语言,可扩展的标记语言,这门语言它没有定义任何的标记,而标记是由使用者自己来定义,但是由于标签名称以及属性名称都由用户自己来命名,导致别人在使

XML——XML文件约束之DTD详解

1.XML文件约束与DTD的简单介绍 我们编写文档来约束一个XML文档的书写规范,这称之为XML约束. 常用的约束技术有: XML DTD XML Schema DTD的基本概念: document type definition 文档类型定义 DTD文件一般和XML文件配合使用,主要是为了约束XML文件. XML文件引入DTD文件,这样XML可以自定义标签,但又受到DTD文件的约束.比如上一节使用XML描述一个班级的信息,如果我们给每一个学生定义一个<面积>标签,语法上也是没有错误的,但是不

xml约束DTD演示

此演示xml和DTD在一个文件中 book.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE 书架 [ <!ELEMENT 书架 (书+)> <!ELEMENT 书 (书名,作者,售价)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)> &

xml中约束和命名空间的区别

在学习xml的时候接触到了xml约束,因为xml的编写非常灵活,所以我们一般会编写一个文档来约束xml文档的书写规范,而这个约束xml文档的文档就成为xml约束,目前有两种约束方式,分别为DTD和SCHEAM,前者比较古老,且不能完全满足xml自动处理的要求(这句话不太理解),后者是w3c组织2001年正是推荐开发者使用,可以很好的对文档的属性,数据类型,结构等方面的描述,下面举例说明: 这个是很简单的描述一本书的xml,它使用的是dtd约束 book.xml <?xml version="

xml简介和DTD简介和语法【对xml进行规范限制】

ajax支持两种数据传输格式:xml和json [数据持久化过程中需要固定的格式来表征数据的键值关系] 1.xml html将数据和样式绑定到一次[不仅仅显示数据][html绑定的样式所以就会因为浏览器的不同而出现差异性] xml只显示数据[语法更加严格][能够随便自定义标签名] xml的用途: (1)程序之间的相互通信[数据接口使用] (2)配置文件[软件级别上的配置文件] (3)存储数据[数据持久化的一个重要用途] (4)规范数据格式[作为接口等用途更加规范的使用,通过标签名来实现描述效果]

xml中的DTD和schema

XML的文档声明<?xml version="1.0" encoding="UTF-8" ?> xml转义字符 <![CDATA[内容]]> 实例: <![CDATA[ <student stuno='s01'> <name>张三</name> <age>23</age> <sex>男<</sex> </student> ]]>

XML(二)约束

<?xml version="1.0" encoding="gbk" ?> <!DOCTYPE 书架 SYSTEM "book.dtd"> <书架> <书> <书名>JAVA</书名> <作者>XXXXXX</作者> <售价>23333</售价> </书> <书> <书名>ANDROID<

log4j.xml与log4j.dtd的配置详细说明与使用

1.log4j.dtd .dtd文件是对相应.xml进行约束验证用的.这里不做介绍了,详细见上一篇关于dtd的介绍:xml基础.DTD验证.Schema验证 log4j.dtd的文件: <?xml version="1.0" encoding="UTF-8" ?> <!-- Authors: Chris Taylor, Ceki Gulcu. --> <!-- Version: 1.2 --> <!-- A configur