XML 您所在的位置:网站首页 xml指的是 XML

XML

#XML| 来源: 网络整理| 查看: 265

1.XML文件约束与DTD的简单介绍

我们编写文档来约束一个XML文档的书写规范,这称之为XML约束。

常用的约束技术有:

XML DTDXML Schema

DTD的基本概念:

document type definition 文档类型定义

DTD文件一般和XML文件配合使用,主要是为了约束XML文件。

XML文件引入DTD文件,这样XML可以自定义标签,但又受到DTD文件的约束。比如上一节使用XML描述一个班级的信息,如果我们给每一个学生定义一个标签,语法上也是没有错误的,但是不符合语义,学生怎么能够用面积来描述呢?这时候我们就需要用到DTD文件来约束这个XML。

杨过 男 20 100 1.1 DTD约束快速入门案例

基本语法:

我们还以班级为例,编写如下DTD文件,myClass.dtd:

第一行表示根元素为班级,并且有学生这个子元素,子元素为1或者多个。 第二行表示学生的子元素为名字,年龄,介绍 名字下面没有子元素了,那么#PCDATA表示名字里面可以放任意文本。 年龄和介绍也是类似。

编写myClass.xml文件并引入DTD文件如下:

周小星 23 学习刻苦 林晓 25 是一个好学生

引入中写的:SYSTEM,表示当前的DTD文件是本地的 如果写的是PUBLIC,则表示引入的DTD文件是来自于网络的.

这时候引入的DTD文件是没有产生作用的,如果我们在学生元素中添加子元素,打开这个XML文件,浏览器依然不会报错。

周小星 23 学习刻苦 100平米 林晓 25 是一个好学生

我们需要编程校验XML文档的正确性。

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

我们编写myXmlTools.html来对这个XML进行校验,如下:

// 创建xml文档解析器对象 var xmldoc = new ActiveXObject("Microsoft.XMLDOM"); // 开启xml校验 xmldoc.validateOnParse = "true"; // 装载xml文档,即指定校验哪个XML文件 xmldoc.load("myClass.xml"); document.writeln("错误信息:"+xmldoc.parseError.reason+""); document.writeln("错误行号:"+xmldoc.parseError.line);

用IE浏览器打开这个html文件,可以看到运行结果:

XML文件校验

可以看到第9行正是我们添加的这一行。

2.DTD细节 2.1 DTD文档的声明及引用

1.内部DTD文档

2.外部DTD文档

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

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

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

比如下例:

2.2 DTD基本语法:

其中: - ELEMENT是关键字,是不能修改的 - NAME表示元素名称 - CONTENT是元素类型,必须要大写!CONTENT的内容有三种写法:

(1)EMPTY——表示该元素不能包含子元素和文本,但可以有属性。 (2)ANY——表示该元素可以包含任何在该DTD中定义的元素内容 (3)#PCDATA——可以包含任何字符数据,但是不能在其中包含任何子元素

2.3 DTD元素的组合类型:

DTD中这样规定:

这个DTD规定了家庭元素中可以有1到多个”人”这个子元素,也可以有0到多个”家电”这个子元素。其中的加号”+”和星号”*”的含义与正则表达式中的含义一致。

XML这样写:

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

符号用途示例示例说明()用来给元素分组(古龙|金庸),(王朔|余杰)分成两组|在列出的对象中选择一个(男人|女人)表示男人或者女人必须出现,两者至少选其一+该对象必须出现一次或者多次(成员+)表示成员必须出现,而却可以出现多个成员*该对象允许出现0次或者多次(爱好*)爱好可以出现两次到多次?该对象必须出现0次或者1次(菜鸟?)菜鸟可以出现,也可以不出现,如果出现的话,最多只能出现一次,对象必须按指定的顺序出现(西瓜,苹果,香蕉)表示西瓜、苹果、香蕉必须出现,并且按这个顺序出现 2.4 属性定义

DTD中属性的定义是这样的:

其中,属性的类型有下面5种:

(1) CDATA (2) ID (3) IDREF/IDREFS (4) Enumerated (5) ENTITY/ENTITIES

属性的特点有如下4种:

(1) #REQUIRED,表示这个属性必须给,不给就报错 (2) #IMPLIED,表示这个属性可以给也可以不给 (3) #FIXED value,表示这个属性必须给一个固定的value值 (4) Default value,表示这个属性如果没有值,就分配一个默认的value值

比如,我们想在学生这个子元素上加上地址这个属性,而且这个属性是必须的,示例如下:

周小星 23 学习刻苦 林晓 25 是一个好学生

这个时候相应的DTD文件也要更新,不然就会报错,如下:

2.4.1 对于属性类型的详细解释

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

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

(3)属性类型-IDREF/IDREFS - IDREF属性的值指向文档中其它地方声明的ID类型的值 - IDREFS同IDREF,但是可以具有由空格分开的多个引用。

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

(5)属性类型-ENTITY,实体

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

①引用实体:

引用实体主要在XML文档中被应用 语法格式如下,引用实体的定义内容最好放在DTD文件的最后。

引用方式:&实体名称; 末尾要带上分号,这个引用将直接转变成实体内容

举例如下:

.... ©right;

②参数实体:

参数实体被DTD文件自身使用 语法格式为:

引用方式为:%实体名称

举例:

3.DTD实际案例

学习DTD的目标在于: (1)要求我们能够看得懂DTD文件, (2)我们可以根据给出的DTD写出对应的XML文件

下面我们看一个案例,下述的DTD文件是从W3School在线教程中的DTD案例中拿过来的,细看每一行,我们都应该能够看得懂。

然后我们可以根据该DTD编写如下最简单的XML文件:

这里是细节 25 28

然后我们用Microsoft.XMLDOM校验该XML,会发现没有任何错误。但是要注意编码。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有