XML 的 约束 :DTD 、 Schema

XML约束:

XML 文件的书写,是要遵守一定的书写格式的,这样,在解析的时候才能让机器读懂你什么意思。在 XML 技术里,可以编写一个文档来约束一个 XML 文档的书写规范,这称之为 XML 约束。一共有两种约束方式 XML DTD 和 XML Schema。


1、DTD

1.1 DTD 范例

Document Type Definition ,全称为“文档类型定义”。例如:

book.dtd

<!ELEMENT 书架 (书+)>
	<!ELEMENT 书 (书名,作者,售价)>
		<!ELEMENT 书名 (#PCDATA)>
		<!ELEMENT 作者 (#PCDATA)>
		<!ELEMENT 售价 (#PCDATA)>
book.xml

<?xml version="1.0" ?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
	<书>
		<书名>JAVA</书名>
		<作者>海竹</作者>
		<售价>30.0</售价>
	</书>
	<书>
		<书名>WEB</书名>
		<作者>西行</作者>
		<售价>29.9</售价>
	</书>
</书架>
dtd 文件中的格式一点都不能错,空格也不能错。(#PCDATA) 就是 parse character data “可解析的数据”,也就是字符串。

三个标签:书名、作者、售价,在使用的时候一个都不能少,也不能超出这个范围。


1.2、DTD引用:

两种方式:一个是引用本地文件,一个是引用网络文件。

本地文件:

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

公共文件:

<!DOCTYPE 文档根节点 PUBLIC "DTD名称" "DTD文件的URL">
例如:

<!DOCTYPE 书架 SYSTEM "book.dtd">

<!DOCTYPE web-app PUBLIC
	"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
	"http://java.sun.com/dtd/web-app_2_3.dtd">

<!DOCTYPE module PUBLIC
    "-//Puppy Crawl//DTD Check Configuration 1.2//EN"
    "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">

1.3、DTD定义的细节:

1.3.1 元素

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

第一行:

|——(书+):表示只能存放一本或者多本书

|—— +:一本或多本

|—— * :0本或多本

|—— ?:0本或一本
|——如果将 ”(书+)“ 换成 ”ANY“,就可以放书之外的东西

第二行:

|——(书名,作者,售价):使用逗号分隔,在文件中必须包含这三个元素,且只能是这三个元素

|——(书名|作者|售价):如果使用”|“分隔,则可以选择的使用三个元素中的元素

另外,可以使用圆括号批量设置:

<!ELEMENT MYFILE((TITLE?,AUTHOR+,EMAIL)*|COMMENT)>
1.3.2 属性(attribute)

1.3.2.1 语法

XML中的标签属性需要通过ATTLIST 为其设置属性,语法格式如下:

<!ATTLIST 元素名
	属性名1   属性值类型   设置说明
	属性名2   属性值类型   设置说明
	……
>
范例:

<!ATTLIST 商品
	类别 CDATA #REQUIRED
	颜色 CDATA #IMPLIED
	产地 CDATA #FIXED "China"
	真伪 CDATA "真"
>

这表示商品这个元素一共有四个属性:类别、颜色、产地、防伪结果。类别是必填项,颜色、产地、真伪是可选项,产地只能是”China“这个值,防伪默认为”真品“。

在XML 中使用的范例:

	<商品 类别="服装" 颜色="红色" 产地="China" 真伪="真">裤子</商品>
	<商品 类别="服装" 真伪="假">裤子</商品>
	<商品 类别="服装">裤子</商品>
1.3.2.2 属性值类型

a、CDATA:普通文本字符串

b、ENUMERATED:枚举

c、EMPTY:

d、ID:唯一

1.3.3 实体定义

1.3.3.1 格式:

<!ENTITY……>

1.3.3.2 引用实体 和 参数实体

A:引用实体:

语法格式:

<!ENTITY 实体名称 "实体内容">
引用方式:&实体名称

范例:(这个例子有问题)

book.dtd

<!ENTITY bookname "Think in JAVA">

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

<!ATTLIST 书名
	ISBN码 CDATA #IMPLIED
>
book.xml

<?xml version="1.0" ?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
	<书>
		<书名>&bookname;</书名>
		<作者>海竹</作者>
		<售价>30.0</售价>
	</书>
	<书>
		<书名 ISBN码="521">&bookname;</书名>
		<作者>西行</作者>
		<售价>29.9</售价>
	</书>
</书架>

B:参数实体:

语法格式:

<!ENTITY % 实体名称 "实体内容">
引用方式:&实体名称;
范例:

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

<!ELEMENT 个人信息 (%PERSON_INFO;|生日)>
<!ELEMENT 客户信息 (%PERSON_INFO;|公司名)>
相当于:

<!ELEMENT 个人信息 (姓名|EMAIL|电话|地址|生日)>
<!ELEMENT 客户信息 (姓名|EMAIL|电话|地址|公司名)>





2、Schema

2.1 简介

schema是为了克服dtd的局限性,并将之取代,而产生的一门语言。XML Schema 文件自身就是一个 XML 文档,但他的扩展名通常为 “.xsd”。一个 XML Schema文档通常称之为模式文档(约束文档),遵循这个文档成成的xml文件称之为实例文档。和 XML 一样,一个 XML Schema必须由一个根节点,但是这个跟节点名称必须为 shema。

编写一个 XML Schema 约束文档后,通常需要把这个文件中声明的元素绑定到一个URI 地址上,在 XML Schema 技术中有一个专业术语来描述这个过程,即把 XML Schema(文档声明)的元素绑定到一个名称空间上,以后 XML 文件就可以通过这个 URI (即名称空间)来高速解析引擎,xml文档中编写的元素来自哪里,被谁约束。





































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值