XML 简介
什么是 XML
- XML 指可扩展标记语言(EXtensible Markup Language)。
- XML 是一种很像HTML的标记语言。
- XML 的设计宗旨是传输数据,而不是显示数据。
- XML 标签没有被预定义。您需要自行定义标签。
- XML 被设计为具有自我描述性。
XML 树结构
XML 文档形成了一种树结构,它从"根部"开始,然后扩展到"枝叶”。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<notes>
<note number="n001">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
</notes>
XML 语法规则
-
XML 声明文件的可选部分,如果存在需要放在文档的第一行
-
XML 文档必须包含 根元素。该元素是所有其他元素的父元素
-
所有的 XML 元素都必须有一个关闭标签
-
XML 标签对大小写敏感
-
XML 必须正确嵌套
-
XML 属性值必须使用引号包含起来
-
XML 中特殊字符需要使用 实体引用 来代替
XML 命名规则
XML 元素必须遵循以下命名规则:
- 名称可以包含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能以字母 xml(或者 XML、Xml 等等)开始
- 名称不能包含空格
使名称具有描述性,名称应简短和简单:使用下划线的名称。
属性
元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。
属性(Attribute)提供有关元素的额外信息。属性通常提供不属于数据组成部分的信息。
属性难以阅读和维护。请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。
- id 属性值唯一
文本
CDATA 区:在该区域中的数据会被原样展示
- 格式:
<![CDATA[ 数据内容 ]]>
CDATA 部分不能包含字符串 “]]>”。也不允许嵌套的 CDATA 部分。
标记 CDATA 部分结尾的 “]]>” 不能包含空格或换行。
XML 验证
DTD 约束
DTD 的目的是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构:
内部 DTD:将约束规则定义在 xml 文档中
-
<!DOCTYPE notes [ <!ELEMENT notes (note*)> <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]>
外部 DTD:将约束的规则定义在外部的 DTD 文件中
-
<!ELEMENT notes (note*)> <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> <!ALLLIST note number ID #REQUIRED>
XML 引入 DTD:
- 外部引入:
<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置"> - 网络资源:
<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">
Schema: 基于 XML 的 DTD 替代
作用是定义 XML 文档的合法构建模块,类似 DTD
- 定义可出现在文档中的元素
- 定义可出现在文档中的属性
- 定义哪个元素是子元素
- 定义子元素的次序
- 定义子元素的数目
- 定义元素是否为空,或者是否可包含文本
- 定义元素和属性的数据类型
- 定义元素和属性的默认值以及固定值
note.xsd :文件
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<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>
XML 引入 Schema
- 填写 XML 文档的根元素
- 引入 xsi 前缀
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
- 引入 xsd 文件命名空间
xs:schemaLocation="http://www.w3school.com.cn note.xsd"
- 为每一个 xsd 约束声明一个前缀,作为标识
xmlns="http://www.w3school.com.cn"
<note xmlns="http://www.w3school.com.cn"
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:schemaLocation="http://www.w3school.com.cn note.xsd">