XML文件的约束:什么叫约束呢?顾名思义,就是对xml文件的内容进行按照既定规则的限制。我们知道,因为xml文件的标签是可以自定义的,而往往我们用xml文件都是为了表达一定的数据集合(即小型的数据库),而众所周知的,数据库也是分类型的,如学生数据库,就包含了一系列的诸如name,age,studentid,grade等等元素,如果没有约束,在这样的学生数据库中添加了诸如cat,foot等等与之毫不相干的元素,就破坏了我们利用xml文件作为规定数据传输的严谨性,所以W3C对xml提供了两种约束来限定xml的元素内容:DTD约束和Schema约束。

  一、DTD约束:

  (1)dtd的元素约束

   DTD(Document Type Definition),文档类型定义,用来约束XML文档。dtd是平面式文档,dtd文件不是xml文档,通常扩展名为“.dtd”。它是最早的xml约束;例如要求xml文档的根元素必须是<students>,在<students>元素下可以包含0~n个<student>元素,每个<student>元素必须有一个number属性,而且还要有三个子元素,分别为<name>、<age>、<sex>,这三个子元素的内容必须为文本内容,而不能是子元素。

   格式展示:

  

<!ELEMENT students (student+)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>

  DTD约束的格式如上所示,dtd对元素的约束分为两种:一种是对简单元素的约束;另一种是对复杂元素的约束;

   简单元素的约束格式:<!ELEMENT 简单元素名 (#PCDATA)>

     (#PCDATA)代表一种约束格式,意思是简单元素的内容为文本,即字符串的形式

     其他约束:EMPTY:代表元素内容为空,例如:<stu/>

          ANY:代表元素内容可以为任意元素

   复杂元素的约束格式:<!ELEMENT 复杂元素名 (子元素名)>

     <!ELEMENT students (student+)>中,代表students的子元素是student元素,并且不止一个,该处的"+"是一个数量控制符

        数量控制符:"+":代表该元素出现一次或者多次

              "?":代表该元素出现0次或者1次

              "*":代表该元素出现0次或者多次

     <!ELEMENT student (name,age,sex)>中,代表student元素的子元素包含name,age,sex三个子元素,且三个子元素出现的顺序必须是name-->age-->sex,否则就会出错。故,此处","逗号代表子元素出现的顺序。此处,除了","逗号,还可以有"|"单竖线,表示student的子元素中只能出现它们三个中的其中一个

   所谓的复杂和简单元素,即是否包含子元素。

   

  (2)DTD文件在xml中如何引用

     3种方式:

    1):引入外部的dtd文件

<!DOCTYPE 根元素名称 SYSTEM "dtd文件路径">

    2):在xml文件内容使用dtd约束

<!DOCTYPE 根元素名称[
   <!ELEMENT 元素名称 (...)> 
   < .......>
 ]>

    3):使用外部的dtd文件(网络上的)

<!DOCTYPE 根元素名称 PUBLIC "dtd文件名称" "dtd文档url">

  (3)DTD的属性约束

   dtd约束除了可以对元素进行约束外,还可以对元素的属性进行约束,如

<!ATTLIST sutdent
id CDATA #REQUIRED
sex (男|女) #IMPLIED
school CDATA #FIXED "xx小学"
>

   属性约束格式:

<!ATTLIST 元素名
属性名1 属性类型 设置说明
属性名2 属性类型 设置说明
...>

ATTLIST代表Attribute List,即属性集合

  1):属性的类型约束:

    CDATA:属性值为任意文本数据;

    Enumerated:属性值必须是枚举列表中的一个;如第二行的(男|女),表示sex属性必须是男或者女,不能为其他的值

    ID:属性值必须是唯一的,并且属性值不能以数字开头;一个元素最多只能有一个ID 属性,ID属性用来表示元素唯一性的唯一标识。ID属性就相当与元素的身份证号,必须是唯一标识!

  2):属性的设置说明

    #REQUIRED:表示属性是必须的;

    #IMPLIED:表示属性是可选的,即这个属性可以不给出;

    #FIXED "xx":表示该属性的值必须为xx

  (4)DTD对实体的定义

    所谓是实体,就是对一段内容或者一段代码取一个名字,方便在其他地方引用

    在xml文件中引用实体,用&实体名

    格式:

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

举个列子:

<!ENTITY email "123456789@qq.com">
<person>
<name>张三</name>
<!--此处的@email就相当于调用了"123456789@qq.com"这个内容放到email标签中 -->
<email>&email</email>
</person>

   注:dtd对实体的定义最好定义在内部的dtd中,通过外部dtd定义的实体,在某些浏览器中不能兼容

XML约束之DTD的更多相关文章

  1. Eclipse引入自定义XML约束文件(DTD,SCHEMA)问题

    Eclipse引入自定义XML约束文件(DTD,SCHEMA)问题 1:说明 使用Eclipse 编写xml文件的约束文件的,包括DTD约束文件,Schema约束文件的时候, 我们也需要接受eclip ...

  2. 2.xml约束技术----------dtd约束

    1.xml的约束 (1)为什么需要定义约束了 比如现在定义一个person的xml文件,只想要这个文件里面保存人的信息,比如name age等,但是如果在xml文件中写了一个元素<猫>,发 ...

  3. XML 约束 (DTD和 schema)

    book.DTD 如下: <?xml version="1.0" encoding="UTF-8" ?> <schema xmlns=&quo ...

  4. 二、XML约束

    XML约束有dtd约束和Schema约束两种 dtd约束:可以在xml内部写dtd约束也可以在xml中引用外部dtd文件 book.dtd<!ELEMENT 书架 (书+)>    < ...

  5. 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介绍 在前面学习的ht ...

  6. XML约束——DTD约束

    参考: 方立勋老师的讲课视频.   什么是XML约束 •在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 为什么需要XML约束 常用的约束技术 •XML DTD • ...

  7. javaweb学习总结八(xml约束DTD)

    一:XML约束概念 xml约束:可以编写一个文档来约束xml文件的书写规范. xml语言格式比较严谨,不可能让程序员随意编写,所以必须要有约束. 二:常用的xml约束技术 1:DTD,document ...

  8. xml约束技术之dtd

    DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块.这篇文章作简单介绍下DTD的用法.想学习完整的请点击下面w3c的教程. 1.DTD官方教程 ##2.xml约束技术: DTD约束:语法相 ...

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

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

随机推荐

  1. jQuery中关于height,innerWidth与outerWidth的区别

    jQuery width() 和 height() 方法 width() 方法设置或返回元素的宽度(不包括内边距.边框或外边距). height() 方法设置或返回元素的高度(不包括内边距.边框或外边 ...

  2. 6410实现网卡(DM9000A)收发功能及ARP协议实现

    1. 网卡硬件结构(DM9000A) 网卡的实质就是MAC通过MII接口控制PHY的过程. MAC主要负责数据帧的构建.数据差错检查.传送控制等. PHY是物理接口收发器,属于物理层,当它收到MAC过 ...

  3. C#调用C++编写的DLL函数, 以及各种类型的参数传递 (转载)

        C#调用C++编写的DLL函数, 以及各种类型的参数传递 1. 如果函数只有传入参数,比如: C/C++ Code Copy Code To Clipboard //C++中的输出函数 int ...

  4. SpringBoot Demo

    Spring Boot,微框架,确实不错,很方便. 相关网站链接: http://www.tuicool.com/articles/veUjQba https://www.gitbook.com/bo ...

  5. es6 static

    static 定义的是类的方法只有类能调用,而普通方法是实例的方法只有类实例能调用.变量也一样. class A { static fn() { console.log('sss'); } fn2() ...

  6. 字符串怎么换行 || 字符串中使用单引号时应该怎么写 || 保留两位小数 || 数字0在if中的意思是false || 什么情况下会会报undefined || null和undefined的区别 ||

    换行的字符串 "This string\nhas two lines" 字符串中使用单引号时应该怎么写 'You\'re right, it can\'t be a quote' ...

  7. 转:MyBean简介

                        (在开始之前,非常感谢 D10.天地弦) 1.1 概述 MyBean是一个用于Delphi应用程序开发的开源.轻量级.可配置插件框架.它通过巧妙的系统架构设计, ...

  8. SQL日期格式化应用大全

    Sql Server 中一个非常强大的日期格式化函数Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect CONVE ...

  9. asp.net调用存储过程详解

    摘要 存储过程的调用在B/S系统中用的很多.传统的调用方法不仅速度慢,而且代码会随着存储过程的增多不断膨胀,难以维护.新的方法在一定程度上解决了这些问题. 关键词 ASP.NET:存储过程   在使用 ...

  10. 用CMake屏蔽Release运行时的控制台窗口

    在默认情况下,CMake构建的VS工程运行时会弹出控制台窗口,可以通过手动方式进行屏蔽,也可以通过CMake命令进行屏蔽. 手动方式:分为两步 第一步:右击VS项目,选择"属性"- ...