Xml全称为Extensible markup Language,可扩展标记语言
XML严格区分大小写
Xml可用于保存关系数据,软件的配置文件,描述软件模块之间的关系
元素
注释
CDATA区
特殊字符
最简单的声明语法:
<?xml version=”1.0” ?>
用encoding属性说明文档的字符编码:
<?xml version=”1.0” encoding=“gb2312”?> (xml文档以什么编码保存,就要以什么编码打开)
用standalone属性说明文档是否独立:
<?xml version = “1.0” encoding=”gb2312”standalone=”yes” ?>
XML语法
1、 文档声明
2、 元素
3、 属性
4、 注释
5、 CDATA区
6、 特殊字符
一个标签有以下几种:
包含标签体:<a>asdas</a>
不含标签体:<a></a> 可以简写成为:<a/>
Xml中有且只能有一个根元素。
文档中的空格和换行不同,默认文档不同,但是解析器可以将之trim掉。
Xml元素的命名规范
一个元素可以包含字母、数字以及其它一些可见字符,但必须遵循以下规范:
区分大小写,例如<p>和<P>是两个不同的标签。
Html不区分大小写。
不能以数字或“_”(下划线)开头
不能以xml(或XML、或Xml等)开头
不能包含空格
名称中间不能包含冒号(:)。
一个标签可以有多个属性,每个属性都有它自己的名称和取值。例如:<input name=”text”>
属性值一定要用双引号(“)或单引号(‘)引起来
Xml中的注释<!---->
注意:
1、 XML声明之前不能有注释
2、 注释不能嵌套
CDATA区
1、 在编写XML文件时,有些内容可能不想让解析引擎执行,而是当做原始内容处理。
2、 遇到此种情况,可以把这些内容放在CDATA中处理
XML约束
在XML里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML文档的书写规范,这称之为XML约束。
常见的约束技术有
xmlDTD:早期约束 必须是UTF-8或Unicode
xmlSchema:后期的约束
DTD约束快速入门
DTD(Document Type Definitiion)全称为文档类型定义。
DTD文件
写在第一行的<!ELEMENT 书架 (书+)>:表示根元素 根元素表示书架
+:表示一或多个。
#PCDATA:表示字符串。
xml文件被约束的条件是写一个DOCTYPE,然后跟一个 根元素用SYSTEM表示引用的是本地的一个定义。
<!DOCTYPE 书架 SYSTEM "book.dtd">其中book.dtd表示相对路径。
<!ELEMENT 书架 (书+)>
<!ELEMENT 书(书名,作者,售价)>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 作者(#PCDATA)>
<!ELEMENT 售价(#PCDATA)>
这里使用的是外部约束
book.xml文件
<?xml version="1.0"encoding="gbk" ?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
<书>
<书名>javaweb开发</书名>
<作者>老张</作者>
<售价>30.00元</售价>
</书>
</书架>
同样可以使用内部约束的方式如:
<!DOCTYPE 书架 [
<!ELEMENT书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT书名(#PCDATA)>
<!ELEMENT作者(#PCDATA)>
<!ELEMENT售价(#PCDATA)>
]>
<书架>
<书>
<书名>javaweb开发</书名>
<作者>老张</作者>
<售价>30.00元</售价>
</书>
</书架>
<!DOCTYPE 文档根节点 PUBLIC “DTD文件的URL“>
<!DOCTYPE web-app PUBLIC
"-//SunMicrosystems,Inc.//DTD Web Application 2.3//EN“
"http://java.sun.com/dtd/web-app_2_3.dtd">
元素定义
定义xml文件能写哪些元素,以及这些元素的内容,定义能写哪些标签
实体定义
在页面中引用的变量
元素定义
在DTD文档中使用ElEMENT声明一个XML元素
语法格式如下
<!ELEMENT 元素名称元素类型>
元素的类型可以是元素的内容或类型
<!ELEMENT 书架(作者,售价)> 复杂元素
<!ELEMENT 书名(#PCDATA)>表示简单元素
如为元素类型,则直接书写,如下:
<!ELEMENT 书架 EMPTY>
·EMPTY :用于表示空元素,例如<br/>
·ANY:表示元素内容为任意类型
约束中美约束的类型,则不能写。
+:一次或多次
?:0次或一次
*:0次或多次。
#required:不需的
• #IMPLIED:可以设置也可以不设置
• #FIXED:说明该属性的取值固定为一个值,在 XML 文件中不能为该属性设置其它值。但需要为该属性提供这个值
直接使用默认值:在 XML 中可以设置该值也可以不设置该属性值。若没设置则使用默认值。
DTD
在XML中ID不可以数字开头。
xml解析中有一个getElementById(“aaa”);与Javascript中的不相同。
实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。
在DTD定义中,一条<!ENTITY…>语句用于定义一个实体。
实体可以分为两种类型:引用实体和参数实体。
引用实体主要在XML文档中被应用
语法格式:
<!ENTITY 实体名称“实体内容” >:直接转变成实体内容
引用方式:
&实体名称
举例:
<!ENTITY copyright “I am a programmer”>
…
©right;
参数实体:
参数实体被DTD文件自身,
语法格式:
%实体名称
举例:
<! % TAG_NAMES “姓名 | EMAIL | 电话 | 地址”>
…
<!ELEMENT 客户信息(%TAGINAMES; | 公司名)>
在DTD中根本就不支持数据类型的。
XML Schema
xml schema 也是一种用于定义和描述XML文档与内容的模式语言,其出现是为了克服DTD的局限性
xml schema特点:
1、 xml schema比dtd更加符合xml语法结构,因为xml schema自身就是一个xml文件,为了有所,扩展名通常为.xsd
2、 xml解析器很容易解析出xmlschema文档中的内容。
4、 xml schema比xml DTD 支持更多的数据类型,并支持用户自定义新的数据类型
5、 xml Schema定义约束的能力非常强大,可以对xml实体文档作出细致的语义限制。
一个XML schema 文档通常称之为模式文档(约束文档),遵循这个文档书写的xml文件称之为实例文档。
和XML文件一样,一个XML Schema文档必须有一个根节点,通常需要把这个文件生命的元素绑定到一个uri地址上,在XML Schema技术中有一个专业术语来描述这个过程,即把XML Schema 文档声明的元素绑定到一个命名空间上。以后xml文件就可以通过这个URL(即名称空间)来告诉解析引擎,xml文档中编写的元素来自哪里,被谁约束。
名称空间的概念
1、 为什么要声明名称空间
由于xml文档可以被任何组织和个人定义,这就完全有可能在一个xml文件中出现重复的元素,此时使用名称空间可以加以区分。
2、 在XML Schema中,每个文约束模式文档就可以被赋以一个唯一的名称空间,名称空间用一个唯一的URL(UniformResource Identifier 统一资源标识符)表示。
3、 通过xmlns关键字来引用一个名称空间,用一个变量指定一个uri地址。如:xml文件中的内容。
<itcast:书架 xmlns:itcast=”http://www.itcast.cn”>
<itcast:书>……</itcast:书>
</itcast:书架>
4、名称空间中的url虽然是以http开头的,但可以不指向任何一个真实的地址,而仅仅是作为一个名称空间来声明
MaxOccurs=”unbounded”:表示它的子节点是无上限的。
compleType:表示的意思是复杂元素
type='xs:string':表示数据类型为字符串。
book.xsd文档
<?xml version="1.0"encoding="UTF-8">
<xs:schemaxmlns:xd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.itcast.cn"
elementFormDefault="qualified">
<xs:elementname="书架">
<xs:sequence maxOccurs='unbounded'>
<xs:elementname='书'>
<xs:compleType>
<xs:sequence>
<xs:element name='书名' type='xs:string'/>
<xs:element name='作者' type='xs:string'/>
<xs:element name='售价' type='xs:string'/>
</xs:sequence>
</xs:compleType>
</xs:element>
</xs:sequence>
</xs:element>
</xs:schema>
targetNamespace的作用是将shema文档中定义的元素绑定到:http://www.itcast.cn这个名称空间上了。
book.xml文档,此文档被上面一个文档约束。
<?xml version="1.0"encoding="UTF-8" ?>
<itcast:书架 xmlns:itcast="http://www.itcast.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.itcast.cnbook.xsd">
<itcast:书>
<itcast:书名>JavaScript网页开发</itcast:书名>
<itcast:作者>张孝祥</itcast:作者>
<itcast:售价>28.00元</itcast:售价>
</itcast:书>
</itcast:书架>
xsi:schemaLocation="http://www.itcast.cn book.xsd":用于说明名称空间是绑定在本地的book.xsd文件中。说明其下面的元素实际定义在什么位置。实际上是在http://www.itcast.cn book.xsd上。
schemaLocation:表示来自xsi名称空间,而xsi有来自:xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”真实存在的网址。这是一个真实的约束文档,输入这个网址后可以看到一个真实约束文档,这个文档是w3c定义好的。
xs命名空间;来自w3c定义好的约束文档中。
使用默认的名称空间:
基本格式:xmlns=”URL”
举例:
使用默认名称空间的原因是,我的xml文档只使用一个约束文档。此时就可以不使用约束文档。
那么itcast就可以省了。可以写成以下的部分:
<书架 xmlns=”http://www.it315.org/xmlbook/schema”>
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation=http://www.itcast.cn book.xsd
<书>
<书名>Javascript网页开发</书名>
<作者>张孝祥</作者>
<售价>28..00元</售价>
</书>
</书架>
不适用名称空间引入XMLSchema文档
文件清单:xmlbook.xml
<?xml version=”1.0” encoding=”UTF-8”?>
<书架 xmlns:xsi=”http://www.w3c.org/2001/XMLSchema-instance”
xsi:noNamespaceSchemalLocation=”xmlbook.xsd”>
<书>
<书名>JavaScript网页开发</书名>
<作者>张孝祥</作者>
<售价>28.00</售价>
</书>
</书架>
下面是引用CSS的方式,其中config.css和它是在同级目录下的。
<?xml version="1.0"encoding="gb2312" standalone="no"?>
<?xml-stylesheettype="text/css" href="config.css"?>
<soft>
<a>
<a1 id="a1">中国</a1>
<a2 id="a2">美国</a2>
</a>
<b>
<b1 id="b1">英国</b1>
<b2 id="b2">日本</b2>
</b>
</soft>