参考: 方立勋老师的讲课视频.
 
什么是XML约束
  •在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。
为什么需要XML约束
常用的约束技术
  •XML DTD
  •XML Schema
DTD(Document Type Definition),全称为文档类型定义
编写DTD约束的两种方式:
  lDTD约束即可以作为一个单独的文件编写,也可以在XML文件内编写。
在xml文件内编写DTD:

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

  

XML文件使用 DOCTYPE 声明语句来指明它所遵循的DTD文件,DOCTYPE声明语句有两种形式: 
•当引用的文件在本地时,采用如下方式:

<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">

例如: <!DOCTYPE 书架 SYSTEM “book.dtd”>。在xml文件中手写一下。

•当引用的文件是一个公共的文件时,采用如下方式: 

<!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约束语法细节

  元素定义
  属性定义
  实体定义
 
元素定义:
 
在DTD文档中使用ELEMENT声明一个XML元素,语法格式如下所示:

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

元素类型可以是元素内容、或类型
•如为元素内容:则需要使用()括起来,如

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

<!ELEMENT 书名 (#PCDATA)>

•如为元素类型,则直接书写,DTD规范定义了如下几种类型:
•EMPTY:用于定义空元素,例如<br/> <hr/>
•ANY:表示元素内容为任意类型。
 
元素内容中可以使用如下方式,描述内容的组成关系
•用逗号分隔,表示内容的出现顺序必须与声明时一致。<!ELEMENT MYFILE (TITLE,AUTHOR,EMAIL)>
• 用|分隔,表示任选其一,即多个只能出现一个

<!ELEMENT MYFILE (TITLE|AUTHOR|EMAIL)>

•元素内容使用空白符分隔,表示出现顺序没有要求:<!ELEMENT MYFILE (TITLE AUTHOR EMAIL)> *
l在元素内容中也可以使用+、*、?等符号表示元素出现的次数:

+: 一次或多次 (书+)

?: 0次或一次 (书?)

*: 0次或多次  (书*)

也可使用圆括号( )批量设置,例

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

属性定义:

xml文档中的标签属性需通过ATTLIST为其设置属性
语法格式:

<!ATTLIST 元素名

属性名1 属性值类型 设置说明

属性名2 属性值类型 设置说明

……

>

属性声明举例:

<!ATTLIST 商品

类别 CDATA #REQUIRED

颜色 CDATA #IMPLIED

>

对应XML文件:

<商品 类别="服装" 颜色="黄色">…</商品>

<商品 类别="服装">…</商品>

设置说明:
•#REQUIRED:必须设置该属性
•#IMPLIED:可以设置也可以不设置
•#FIXED:说明该属性的取值固定为一个值,在 XML 文件中不能为该属性设置其它值。但需要为该属性提供这个值

直接使用默认值:在 XML 中可以设置该值也可以不设置该属性值。若没设置则使用默认值。

举例:

<!ATTLIST页面作者

       姓名 CDATA #IMPLIED

       年龄 CDATA #IMPLIED

       联系信息 CDATA #REQUIRED

       网站职务 CDATA #FIXED "页面作者"

       个人爱好 CDATA "上网"

       >

  

常用属性值类型:

CDATA:表示属性值为普通文本字符串。
ENUMERATED
ID
ENTITY(实体)
 
属性值类型ENUMERATED :

属性的类型可以是一组取值的列表,在 XML 文件中设置的属性值只能是这个列表中的某个值(枚举)
<?xml version = "1.0" encoding="GB2312" standalone="yes"?>
<!DOCTYPE 购物篮 [
<!ELEMENT 肉 EMPTY>
<!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">
]>
<购物篮>
<肉 品种="鱼肉"/>
<肉 品种="牛肉"/>
<肉/>
</购物篮>

  

属性值类型ID :

表示属性的设置值为一个唯一值。ID 属性的值只能由字母,下划线开始,不能出现空白字符
 
实体定义:
实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。
在DTD定义中,一条<!ENTITY …>语句用于定义一个实体。
实体可分为两种类型:引用实体和参数实体。
 
引用实体:
  引用实体主要在 XML 文档中被应用

  语法格式:
  •<!ENTITY 实体名称 “实体内容” >:直接转变成实体内容
  引用方式:

  &实体名称;

举例:
  <!ENTITY copyright “I am a programmer">

   ……

   &copyright;

  

参数实体:

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

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

引用方式:

%实体名称;

举例1:
<!ENTITY % TAG_NAMES "姓名 | EMAIL | 电话 | 地址">

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

<!ELEMENT 客户信息 (%TAG_NAMES; | 公司名)>

  

举例2:
<!ENTITY % common.attributes

   " id ID #IMPLIED

  account CDATA #REQUIRED "

>

...

<!ATTLIST purchaseOrder %common.attributes;>

<!ATTLIST item %common.attributes;>

  

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

  1. 【JAVA与XML、dtd约束、Schema约束】

    一.XML. (1)XML:Extensible Markup Language (2)XML是一种标记语言. (3)XML的设计宗旨是传输数据,而不是显示数据. (4)XML标签没有被预定义,即使用 ...

  2. xml技术DTD约束定义

    XML约束 在XML技术中,可以编写一个文档来约束一个xml文档的书写规范,这称之为XML约束为什么需要XML约束? class.xml <stu><面积>?人怎么会有面积元素 ...

  3. XML的DTD约束

    DTD约束:DTD的声明和引用 1.内部DTD文档 <!DOCTYPE 根元素 [定义内容]> 2.外部DTD文档 <!DOCTYPE 根元素 SYSTEM "DTD文件路 ...

  4. XML内部DTD约束 Day24

    <?xml version="1.0" encoding="UTF-8"?> <!-- 内部DTD --> <!-- XML:ex ...

  5. XML、DTD约束

    XML的作用: xml现在主要用于配置文件 文档声明: 如果你使用记事本打开文档,此时如果记事本默认保存数据到硬盘根据的是"GB2312"编码,这个时候如果你在xml文档源码中en ...

  6. XML学习1 xml序言 dtd约束

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

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

  8. 【PHP XML与dtd概述【完整版】】

    一.XML文件简介 关于XML的大多数人都知道一些,HTML->xhtml->xml,这个顺序本来应当是HTML发展的顺序. XML可以当做配置文件使用,还可以充当小型的数据库. vers ...

  9. 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 ...

随机推荐

  1. FastDFS配置说明

    前面了解了fastdfs的原理,接下来就熟悉一下安装过程,准备了三台机器,一台模拟client,一台模拟storage,一台模拟tracker.     三台机器均为debian6,系统为最小化安装, ...

  2. webservice cxf error:org.apache.cxf.interceptor.Fault: Unmarshalling Error: 意外的元素 (uri:"", local:"ca

    服务器端webservice接口 需要定义@WebParam,如: public ReturnDTO cardBatchSyn(@WebParam(name = "cardBatchSynM ...

  3. Eclipse如何设置字体

    Eclipse 是一个开放源代码的.基于Java的可扩展开发平台,是学习java和开发java最常用的IDE之一.有时候会遇到这种情况,刚刚下载了新的Eclipse,字体显示英文没问题,但是显示中文就 ...

  4. 日常css和js小知识点记录

    2015-6-29 1.<meta name="viewport" content="width=device-width,user-scalable=no&quo ...

  5. 让ecshop用户登录评价以可择匿名评价

    ECSHOP 默认的程序 是 当用户登录后,对商品商品评价是不是能匿名评价的. 有些店铺设置了只能登录评价,但客户又不想显示自己的账号名称.这时候 这功能 就可以派上用场了 1在 comment.ph ...

  6. northwind数据库

    ① Categories: 种类表相应字段:CategoryID :类型ID:CategoryName:类型名;Description:类型说明;Picture:产品样本 ② CustomerCust ...

  7. python中列表和字典常用方法和函数

    Python列表函数&方法 Python包含以下函数: 序号 函数 1 cmp(list1, list2)比较两个列表的元素 2 len(list)列表元素个数 3 max(list)返回列表 ...

  8. Maven invalid task...

    执行maven构建项目报错: Invalid task '‐DgroupId=*': you must specify a valid lifecycle phase, or a goal in th ...

  9. ACM题目————The Blocks Problem

    代码参考:http://www.hankcs.com/program/uva-q101-the-blocks-problem.html Description Background Many area ...

  10. Python 中translate()与replace()区别

    translate函数和replace函数一样,用于替换字符串中的某个部分,但是和replace不同,translate只处理单个字符,而且可以同时进行多个替换.在使用translate函数转换之前, ...