一、XML简介
XML 指可扩展标记语言(EXtensible Markup Language)
XML 是一种标记语言,很类似 HTML
XML 的设计宗旨是传输数据,而非显示数据
XML 标签没有被预定义,需要自行定义标签
XML 被设计为具有自我描述性
XML 是 W3C 的推荐标准
版本:XML 1.0,XML 1.1,目前常用 XML 1.0,因为 XML 1.1 不能向下兼容
XML 和 HTML 的差异
XML 不是 HTML 的替代。
XML 和 HTML 为不同的目的而设计:
XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息,而 XML 旨在传输信息。
XML示例
<?xml version="1.0" encoding="gbk"?>
<note>
<to date="08/08/2008">George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
二、XML语法
1)所有 XML 元素都须有关闭标签
2)XML 标签对大小写敏感
3)XML 必须正确地嵌套
4)XML 文档必须有根元素(如上示例中的note
标签)
5)XML 的属性值须加引号(如上示例中的data
属性)
6)在 XML 中,空格会被保留(HTML只会保留一个空格)
7)XML 以 LF 存储换行
8)文档声明必须作为文件第一行(XML1.0中可以没有申明,XML1.1中必须有)
9)注释与HTML格式一致
<!-- 这是注释 -->
三、XML约束
DTD 约束
-
DTD 文件的后缀名
.dtd
-
创建 DTD 文档的步骤
- 查看 xml 文件中有多少个元素, 有几个元素, 在 dtd 文件中写几个
<!ELEMENT>
- 判断元素是简单元素还是复杂元素
- 简单元素: 没有子元素, 格式:
<!ELEMENT 元素名称 (#PCDATA)>
- 复杂元素: 有子元素的元素, 格式:
<!ELEMENT 元素名称 (子元素)>
- 简单元素: 没有子元素, 格式:
- 在 xml 文件中引入 dtd 文件
格式:<!DOCTYPE 根元素名称 SYSTEM "dtd 文件的路径">
- 使用 eclipse 查看校验效果. 因为浏览器只负责校验 xml 的语法, 不负责校验约束.
- 查看 xml 文件中有多少个元素, 有几个元素, 在 dtd 文件中写几个
-
dtd 的三种引入方式
// 第一种方式: 引入外部的 dtd 文件
<!DOCTYPE 根元素名称 SYSTEM "dtd 路径">
// 第二种方式: 使用 xml 页面内部的 dtd 文件
<!DOCTYPE 根元素名称 [
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
// 第三种方式: 使用网络上的 dtd 文件
<!DOCTYPE 根元素 PUBLIC "dtd 名称" "dtd 文档的 url">
// 示例: struts 2 中使用的配置文件, 使用的是外部的 dtd 文件
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
// 示例: 带有 DTD 的 XML 文档
<?xml version="1.0" encoding="gbk"?>
// dtd 约束
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
// xml 内容
<note>
<to>zhangsan</to>
<from>lisi</from>
<heading>Invitation</heading>
<body>Don't forget the meeting!</body>
</note>
-
DTD 元素
- 格式:
<!ELEMENT 元素名称 约束>
- 简单元素: 没有子元素的元素
- 格式:
<!ELEMENT name (#PCDATA)>
-
(#PCDATA)
: 约束 name 是字符串类型 - EMPTY: 元素为空
- ANY: 任意类型
- 格式:
- 复杂元素
- 格式:
<!ELEMENT 元素名称 (子元素)>
,
例如:<!ELEMENT person (name+,age?,sex*,school)>
- 表示元素出现的次数:
- : 表示该元素可以出现一次或多次
- ? : 表示该元素可以出现零次或一次
- : 表示该元素可以出现零次或多次
- 子元素之间使用逗号进行分隔, 表示元素出现的顺序
- 子元素之间使用 "|" 进行分隔, 表示元素只能出现其中的任意一个
- 格式:
- 格式:
-
DTD 属性
- 格式:
<!ATTLIST 元素名称 属性名称 属性类型 属性的约束>
- 属性的类型:
-
CDATA
: 表示值为字符数据 -
(en1|en2..)
: 表示值是枚举列表中的一个值 - ID : 值只能是字母或者下划线开头,
-
- 属性的约束
-
#REQUIRED
: 属性是必需的 -
#IMPLIED
: 属性是可有可无的 -
#FIXED
: 属性值是固定的 - 值: 该属性的默认值.
-
- 格式:
// 示例:规定一个默认的属性值
// DTD
<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "10">
// 合法的 XML
<square width="100" /> // 如果宽度没有被设定, 其默认值为 0
// 示例: 枚举属性值
// DTD
<!ELEMENT payment (#PCDATA)>
<!ATTLIST payment type (check|cash) "cash">
// 合法的 XML
<payment type="check" />
- DTD 实体
- 实体是用于定义引用普通文本或特殊字符的快捷方式的变量
- 在 DTD 中定义, 在 xml 中使用
- 格式:
<!ENTITY 实体名称 "实体内容">
- 一个实体由三部分组成: "&" + 一个实体名称 + ";"
// 示例:
// DTD
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "版权所有">
// xml 文件
<author>&writer;©right;</author>
DTD 综合练习
// dtd 约束文件
<!DOCTYPE TVSCHEDULE [
<!ELEMENT TVSCHEDULE (CHANNEL+)>
<!ELEMENT CHANNEL (BANNER,DAY+)>
<!ELEMENT BANNER (#PCDATA)>
<!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
<!ELEMENT HOLIDAY (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
<!ELEMENT TIME (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT DESCRIPTION (#PCDATA)>
<!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
<!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
<!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
<!ATTLIST TITLE RATING CDATA #IMPLIED>
<!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>
]>
// 对应的 xml 文件
<TVSCHEDULE NAME="CSA">
<CHANNEL CHAN="1">
<BANNER>
探索频道
</BANNER>
<DAY>
<DATE>
星期五
</DATE>
<HOLIDAY>
探索世界
</HOLIDAY>
</DAY>
</CHANNEL>
<CHANNEL CHAN="2">
<BANNER>
经济频道
</BANNER>
<DAY>
<DATE>
星期二
</DATE>
<PROGRAMSLOT>
<TIME>
9:10
</TIME>
<TITLE>
时间
</TITLE>
<DESCRIPTION>
北京时间
</DESCRIPTION>
</PROGRAMSLOT>
</DAY>
</CHANNEL>
</TVSCHEDULE>
Schema 约束
- Schema 文件本身就是一个 xml 文件, 文件扩展名 ".xsd"
- Schema 文件的第一行是 xml 的文档声明, 根节点是
<shema>
- Schema 文件的第一行是 xml 的文档声明, 根节点是
- 一个 xml 文件中可以有多个 Schema 文件
// 示例
// xml 文档
<?xml version="1.0" encoding="gbk"?>
<note>
<to>zhangsan</to>
<from>lisi</from>
<heading>Invitation</heading>
<body>Don't forget the meeting!</body>
</note>
// Schema 约束
<?xml version="1.0" encoding="gbk"?>
<xs:shema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.cnblogs.com/linkworld/"
xmlns="http://www.cnblogs.com/linkworld/"
elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element>
</xs:schema>
// 对于 Schema 的引用
<?xml version="1.0" encoding="gbk"?>
<note
xmlns="http://www.cnblogs.com/linkworld/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.cnblogs.com/linkworld/ note.xsd">
<to>zhangsan</to>
<from>lisi</from>
<heading>Invitation</heading>
<body>Don't forget the meeting!</body>
</note>
-
Schema 约束文件说明
-
<schema>
元素可包含属性 -
xmlns:xs="http://www.w3.org/2001/XMLSchema"
- 表示当前 xml 文件是一个约束文件
- schema 文件中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"
- 它还规定了来自命名空间 "http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀
xs:
-
targetNamespace="http://www.cnblogs.com/linkworld/"
- 使用 schema 约束文件时, 直接通过这个地址引入约束文件. 为了避免约束空间的重复, 使用 url 地址命名
-
xmlns="http://www.cnblogs.com/linkworld/"
- 指出默认的命名空间是 "http://www.cnblogs.com/linkworld/"
-
elementFormDefault="qualified"
- 表示任何 xml 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定
-
-
在 xml 文件中引入 Schema 约束文件
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- 表示该 xml 文件是一个被约束文件, 注意
-instance
- "xsi" 表示 xmlns 的别名, 为了避免和下面名称空间的冲突
- 表示该 xml 文件是一个被约束文件, 注意
-
xmlns="http://www.cnblogs.com/linkworld/"
- 规定了默认命名空间的声明. 表名该 xml 文档中使用的所有元素都被声明于
"xmlns="http://www.cnblogs.com/linkworld/" 这个命名空间
- 规定了默认命名空间的声明. 表名该 xml 文档中使用的所有元素都被声明于
-
xsi:schemaLocation="http://www.cnblogs.com/linkworld/ note.xsd">
- 包含两个参数
- 第一个参数是需要使用的命名空间
- 第二个参数约束文档的地址路径
-
-
编写 Schema 约束文件步骤
// 1\. 查看 xml 中有多少个元素, `<element name="元素名">`
// 2\. 查看简单元素和复杂元素
// 复杂元素
<complexType>
<sequence>
子元素
</sequence>
</complexType>
// 简单元素, 写在复杂元素 sequence 里面
<element name="元素名"/>
- Schema 中的简单元素
- 简单元素指那些仅包含文本的元素
// 1\. 定义简单元素的语法:
<element name="元素名" type="元素类型"/>
// 示例:
// xml 文件
<lastname>Smith</lastname>
<age>29</age>
<birthday>1996-4-9</birthday>
// schema 约束
<element name="lastname" type="string"/> // lastname 的类型是 string
<element name="age" type="integer"/> // age 的类型是 integer
<element name="birthday" type="date"/> // birthday 的类型是 date
// 简单元素的默认值和固定值
<element name="color" type="string" default="red"/> // 默认值
<element name="color" type="string" fixed="red"/> //固定值
- Schema 中复杂元素指示器
- Order 指示器: 用于定义元素的顺序
- All: 可以按照任意顺序出现, 并且每个子元素必须只出现一次
- Choice: 表示元素只能出现其中的一个
- Sequence: 子元素必须按照特定的顺序出现
- Occurrence 指示器: 用于定义某个元素出现的频率
- maxOccurs: 某个元素可出现的最大次数
- minOccurs: 某个元素能够出现的最小次数
- Group 指示器: 用于定义相关的数批元素
- Group name: 元素组
- attributeGroup name: 属性组
- Order 指示器: 用于定义元素的顺序
转载文章
XML 之快速入门
网友评论