XML一)之两种约束


XML的基本了解

1.XML是什么: 可扩展的标记语言(eXtensibleMarkuP Language),预定义的标签是HTML是显示数据,自定义标签的是xml,设计的宗旨是表示数据,非显示数据。即XML描述的是文档的内容与语义,而不是文档应当如何显示

2.目前经常使用的Xml版本是1.0。XML的作用:

a)在实际的开发中,主要作为程序的配置文件

b)硬编码:是将程序写死了,xml提高系统的灵活性。

c)XML是一种通用的数据交换格式。可以使不同程序语言之间进行数据的交换。

d)使用XML可以实现异构语言,异构平台之间的交互。

3.解析器(Parse):将标记语言解析执行和显示。比如IE浏览器解析HTML语言。

4.XML标签和元素的命名规范:它可以包含字母,数字,减号,下划线和英文句点。

a)严格区分大小写。

b)只能以字母或下划线开头

c)不能以xml(或XML,Xml等开头),作为保留词用。我们目前可以用,不建议

d)名称字符之间不能有空格或制表符;

e)名称字符之间不能使用冒号。

5.XML的基本语法声明。

a)文档声明:用于表示该文档是一个xml文档。对于XML文档来说,<??>处理指令必须要顶格写,前面不能有任何空白。(前一行连空行都不能有,也不能有注释)。保存在磁盘上的文件编码要与声明的编码一致。既是说你声明的明明是UTF-8,保存成GBK,就会出现错误

格式:<?xml version=”1.0” ?>。

声明中的enconding属性,说明当前XML文档使用的编码,认utf-8。

声明中的standalone属性: 说明xml文档是否独立。

b)元素:

i.XML中的每个元素都是成对出现的(有开始,有结束),XML中的元素嵌套关系要保持正确性,即先开始的标记要先结束,后开始的标记要后结束。(结束标签不能省略)

ii.每一个XML文档都有且只有一个根元素(Root Element)。所谓根元素,就是唯一一个包含了所有元素的元素。

iii.XML文档中不会忽略回车,换行及空格和缩进。

c)属性

i.XML元素可以具有属性属性的形式为:属性名=“属性值”,

比如gender=“male”

ii.属性值一定要使用单引号或双引号括起来。多个属性之间使用空格分开。

iii.在一个元素上,相同的属性只能出现一次。

d)注释:<!--comments -->,注释是不允许嵌套。与HTML注释一样

e)CDATA区:是CharactersData的缩写。

i.作用:CDATA区中的内容都是文本

ii.语法格式:<![CDATA[文本内容]]>

f)处理指令(PI:Processing Instruction):

i.作用:用来指挥软件如何解析XML文档

ii.语法:必须以<?和?>来限定界限。

例如:XML使用外部css来达到HTML的显示效果

<?xml-stylesheet href=”mystyle.css” type=”text/css”?>

XML的基本约束

1.格式正规(well formed)的xml文档。符合XML的语法要求的XML的文档就是格式正规的XML文档。

2.有效的(valid)XML文档。首先XML文档是个格式正规的XML文档,然后又需要满足DTD的要求,这样的XML文档成为有效的XML文档。即遵循约束规范的。

3.总结:格式良好的不一定是有效的,但有效的必定是格式良好的。

DTD约束

1.Document Type DeFinition(DTD,文档类型定义):

a)作用:约束XML的书写规范

b)DTD文件保存到磁盘时,必须使用UTF-8编码。

2.DTD的引入外部的DTD文档约束XML两种方式:

a)DTD文件保存在本地:<!DOCTYPE根元素名称 SYstem “DTD文件的路径”

b)DTD文件保存在网络:<!DOCTYPE根元素名称 PUBLIC “DTD名称” “DTD的URL路径”

例如:<!DOCTYPEweb-app PUBLIC

"-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

DTD文件保存到网络一般是认的文件路径,我们可不做更改。

DTD文档的语法

1.定义元素:ELEMENT关键字

a)格式:<!ELEMENT 元素的名称使用规则>

i.(#PCDATA)(ParsedCharacter Data),可解析的字符数据。简易上说就是字符串

ii.EMPTY:指示元素的主体不能有主体内容

iii.例如只能写:<tagname/>,而不能写<tagname>abc</tagname>

iv.ANY:用于知识元素的主体内容为任意类型

v.(子元素):指示元素中包含的子元素。

b)定义元素及描述它们的关系:

i.如果元素用逗号分开,,说明必须按照声明的顺序去编写XML的元素

ii.如果元素用|分开,说明任选其一,就是几个之中只能选一个

c)特殊符号来表示元素出现的次数,跟正则表达式符号功能很像

i.+:表示至少出现一次,一次或多次

ii.*:表示可有可无,零次或多次

iii.?:表示只能出现一次或零次,不能出现多次

iv.以上符号都没有,表示必须且出现一次

2.定义元素的属性(attribute)

语法:<!ATTLIST 那个元素的属性

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

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

注意:属性值之间不能用逗号。我门可以用空格各科i。

属性值类型:

a)CDATA:表示属性的取值为普通的文本字符串

b)ENUMEATED(DTD没有此关键字):

语法:<!ATTLIST 元素名称 (值1|值2) “值1”>

c)id:属性的取值只能唯一,不能重复

设置说明:

i.#required:表示该属性必须出现

ii.# IMPLIED:表示该属性可以有,可以没有

iii.#FIXED “固定值” :不写的话就是认值,写的话和必须和认值一样

iv.直接值:什么设置关键字都没有,直接一个属性值。属性的取值是认值,元素的元素不写时有认值,写上的话和认值不一样也不会出错。这点和#FIXED相反。

3.定义实体:ENTITY关键字。就是为一段文本内容指定一个名称,使用时通过这个名称就可以以引用其所代表的内容。类似键值对映射关系

a)XML中的实体引用(entityreference):

XML常用的预定义实体引用:

i.&lt;小于(<)

ii.&gt;大于(>)

iii.&amp;(&)

iv.&quot;(引号)

v.&apos;(省略号)

自定义一个实体引用:

使用格式:<!ENTUTY 实体名实体值”>

调用方式:&引用名;(其实就是实体值)

例如:

<?xml version="1.0"?>

<!DOCTYPE company[

<!ENTITY liangshenghai "梁胜海">

<!ENTITY changshilu "长石路">

]>

<company>

<name>&liangshenghai;</name>

<address>&changshilu;</address>

</company>

b)参数实体:

语法:<!ENTITY %实体名称“实体内容>

调用方式:%实体名称

例如:

<!DOCTYPEcompany[

<ENTITY%tagname "姓名|电话|地址">

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

<ELEMENT客户信息 (%tagname;|地址)>

]>

4.关于普通实体与参数实体(ENTITY)的区别:

1)普通实体是在dtd中定义,xml中使用,使用时候格式为:&address

2)参数实体是在dtd中定义,dtd中使用,定义的时候使用%,使用的时候也需要使用%,%address;

3)普通外部实体的定义方式是:

格式:<!ENTITYaddress SYstem http://www.baidu.com/xml.xml>

他表示使用http://www.baidu.com/xml.xml网址的内容来替换掉address,而不是使用http://www.baidu.com/xml.xml字符串本身来替换掉address。

4) 外部参数实体:

<!ENTITY % address SYstem “http://www.baidu.com/xml.xml”,

使用的时候:%address;

5.DTD的局限性:

a)DTD不遵守XML语法(即写XML是一种语法,写DTD却是另一种语法)

b)DTD数据类型有限

c)DTD不可扩展

d)DTD不支持命名空间

Schema约束的简单介绍

1.Schema(模式):其作用与dtd一样,也是用于验证XML文档的有效性,只不过它提供了比dtd更强大的功能和更细粒度的数据类型,另外Schema还可以自定义数据类型。此外,Schema也是一个XML文件,而dtd则不是。

2.使用Schema的好处:

a)Schema基于XML语法

b)Schema可以能处理XML文档的工具去处理

c)Schema大大扩充了数据类型,可以自定义数据类型

d)Schema支持元素的继承

e)Schema支持属性

3.所有的Schema文档,其根元素必须为Schema。

4.SimpleType(简单类型)与ComplexType(复杂类型)的区别:

1) SimpleType类型的元素没有子元素,也没有属性

2) 当需要定义的元素包含了子元素或者属性时,必须要使用ComplexType。

5.SimpleContent,用于ComplexType元素上,用于限定该ComplexType的内容类型,表示该ComplexType没有子元素,同时该ComplexType需要有属性,否则它就成为SimpleType了。

以后会专题讲解XMl的Schema,此待续。。。。。。。。。

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念