XML--约束模式

XML 的约束模式

XML 文档仅是格式良好还不够,其中的内容还必须满足某些条件的约束限制。在这些条件下,需要定义一套规则来对 XML 文档中的内容作出限制,这套定义的规则就是 XML 文档

的约束模式。

约束模式定义了 XML 文档中允许出现的元素名,元素中的属性,内容的类型,以及元素之间的嵌套关系和出现顺序

1 XML 的约束模式语言

1)XML DTD  2)XML Schema 满足正确的语法并不代表XML是有效的,只能说是正确的。如果使XML有效必须依赖于DTD或是Schema

1.1 XML DTD(Document Type Definition) 

a)用来描述文档的结构:
                  1) 元素(ELEMENT)的定义规则

                  2)元素与元素之间的关系

                  3)属性(ATTLIST)的定义规则

                  4)可使用的实体(ENTITY)或是可使用的符号(NOTATION)规则

 b)XML与DTD之间的关系:

                  1)类与对象之间的关系

                  2)数据库表与数据记录的关系

                  3)有了DTD每个XML文件可以有属于自己的格式

                  4)有了DTD不同的XML文件可以使用同一种格式

                  5)有了DTD可以校验一个外部的XML文件是否符合格式

c)DTD文档的声明与引用

                  1) 内部DTD

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book [
<!ELEMENT book (author, content)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT content (#PCDATA)>
]>
<book>
<author>ivan</author>
<content>hello everyone</content>
</book>

                  2) 外部DTD(推荐这种)

<!ELEMENT book (author, content)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT content (#PCDATA)>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book SYSTEM "dtd_1.dtd">
<book>
<author>ivan</author>
<content>hello everyone</content>
</book>

                  3)内部外部DTD

d)元素的语法:

<!ELEMENT name type>Type可选项:

                 1) EMPTY 该元素不能包含子元素和文本,但可以有属性(空元素)

                  2) ANY 该元素可以包含任何在DTD中定义的元素内容(非常少用没啥实际意义)

                  3) #PCDATA parsed character data可解析的字符数据(使用最多)

                  4)纯元素类型 只包含子元素并且这些元素外没有文本(使用最多)

                  5)混合类型 包含子元素和文本的混合体(很少用)

例:
<!ELEMENT person EMPTY>
<person id=”1”/>     正确的
<person>ivan</person>   错误的
<!ELEMENT person ANY>
<person><user>ivan</user></person>    正确
<person>ivan</person>            正确

c)修饰符号:

   1)   ()    用来给元素分组   

   2)     |   在列出的对象中选择一个

   3)      +         该对象至少出现一次,可以出现多次(即1次或是多次)

   4)      *          该对象允许出现零次,也可以出现多次(即0次或是多次)

   5)      ?    该对象可以出现,但只能出现一次(即0次或是1次)

   6)     ,   该对象必须按指定顺序出现

<!ELEMENT book ((id|author),content)>
注:给book里的元素进行分成两组,第一组id和author只能选择一下
<!ELEMENT book ((id+|author),content)>
Id可以出现1次或是多次
<!ELEMENT book ((id*|author),content)>
Id可以不出现,也可以出次1次
<!ELEMENT book ((id?|author),content)>
Id可以不出现,出现只能出现1次地

e)属性的语法

<!ATTLIST 元素名称 属性名称 属性类型 属性特征>

例:
<!ELEMENT title (#PCDATA)>
<!ATTLIST title name CDATA #REQUIRED>
定义title元素的属性name为必须填写,值为任意字符串

属性类型:

1)CDATA character data字符数据(常用)

2)ID  表示该属性的取值必须是唯一的(常用)<!ATTLIST title id ID #REQUIRED>

3)IDREF 属性的值指向文档中其它地方声明的值
<!ATTLIST title id ID #REQUIRED>
<!ATTLIST title id1 IDREF #REQUIRED>
<title id="dd" id1="dd">dd</title>

4) IDREFS  同IDREF。区别在于可以用空格分隔来引用多个。

5) NMTOKEN 是CDATA的一个子集。表示属性必须是英文字母、数字、句号、破折号、下划线、冒号、属性值不能有空格

6) NMTOKENS  属性值可以有空格

7) ENUMERATED

属性特点:
1)#REQUIRED 必须有

2)#IMPLIED 可以有

3)#FIXED 属性的值必须是指定的固定值

<!ATTLIST users company CDATA #FIXED "IBM">
<users company=”IBM”/>这里的值只能是IBM

4)为属性提供一个默认值

<!ATTLIST users company CDATA "IBM">
<!ATTLIST users sex (M|F) #REQUIRED>

f)实体的语法
1)普通实体:

a)内部实体<!ENTITY 实体名 “值”>  单一的值

b)外部实体<!ENTITY 实体名 SYSTEM “值”> 文件里的值

 

<!ENTITY writer "ivan">
<content>&writer;</content>
2)参数实体:
<!ENTITY % address "country,city">
<!ELEMENT book (author, content,%address;)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT content (#PCDATA)>
<!ELEMENT country (#PCDATA)>
<!ELEMENT city (#PCDATA)>
 
<book>
<author>ivan</author>
<content>hello everyone</content>
<country>china</country>
<city>beijing</city>
</book>
DTD 的局限性
1)DTD不遵守XML语法(写XML文档实例时候用一种语法,写DTD的时候用另外一种语法)

2)DTD数据类型有限(与数据库数据类型不一致)

3) DTD不可扩展

4) DTD不支持命名空间(命名冲突)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值