XML--约束模式

前端之家收集整理的这篇文章主要介绍了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不支持命名空间(命名冲突)

猜你在找的XML相关文章