XML--可扩展标记语言
XML --可扩展标记语言(EXtensible Markup Language)
xml的历史
GML 通用标记语言(1969) ---->SGML 标准通用标记语言 (1985) ----->HTML 超文本的标记语言( 1993) ---->XML 可扩展的标记语言(1998)
XML,最初的本意是用来替代HTML语言的,但是俩种语言还有一定差异的,所以中间出现了一种过渡的语言:XHTML 。
因为HTML在万维网上已经广泛使用,XML难以替代。
XML 把数据从 HTML 分离,这样就可以专注于使用 HTML 进行布局和显示,并确保修改底层数据不再需要对 HTML 进行任何的改变。
1. XML和HTML的区别:
XML 被设计用来传输和存储数据。
HTML 被设计用来显示数据。
2.XML 不是对 HTML 的替代
XML 是对 HTML 的补充。
XML 是独立于软件和硬件的信息传输工具。
3.XML没有任何行为仅仅是纯文本
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
xml的应用
1.XML的文档实例
<?xml version="1.0" encoding="UTF-8" ?> <!-- 这是一个XML文档的声明 -->
<courses> <!-- 这是根元素-->
<course> <!--这是子元素-->
<name>XML</name> <!--这是子元素-->
<time>2</time> <!--这是子元素-->
<teacher>xiaocheng</teacher> <!--这是子元素-->
</course>
<course>
<name>HTML</name> <!--这是子元素-->
<time>10</time> <!--这是子元素-->
<teacher>xiaocheng</teacher> <!--这是子元素-->
</course>
</courses>
-
声明中定义了XML的版本(1.0)和所使用的编码格式(UTF-8)
-
XML文档形成树形结构

2.XML的语法规则
-
XML 中的注释
<!--这是一个XML注释 -->
-
所有 XML 元素都须有关闭标签
<!--HTML中或有一些标签可以不关闭,但XML要求所有的标签都必须关闭--> <p>This is a line</p> <!-- </p>必须存在 -->
-
XML 标签对大小写敏感
<p>This is a line</P> <!-- 这是错误的 --> <!-- 以下两个可以同时存在,为两对标签 --> <p>This is a line</p> <P>This is a line</P>
-
XML 必须正确地嵌套
<!-- 由于 <i> 元素是在 <b> 元素内打开的,那么它必须在 <b> 元素内关闭。--> <b><i>This text is bold and italic</i></b>
-
XML 文档必须有根元素
<courses> <!-- 这是根元素 必须存在--> <course> <!--这是子元素--> <name>XML</name> <!--这是子元素--> <time>2</time> <!--这是子元素--> <teacher>xiaocheng</teacher> <!--这是子元素--> </course> </courses>
-
XML 的属性值须加引号
<courses> <course id="1">XML</course> <!--这是课程子元素,课程属性id的值必须写在”“中 --> </courses>
-
XML的实体引用
在 XML 中,有 5 个预定义的实体引用:
< < 小于 > > 大于 & & 和号 ' ' 单引号 " " 引号 注释:在 XML 中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。
<message>if salary < 1000 then</message> <!-- xml语法错误,需使用实体引用 --> <message>if salary < 1000 then</message>
-
在 XML 中,空格会被保留
HTML 会把多个连续的空格字符裁减(合并)为一个,而XML保留空格
-
XML 以 LF 存储换行
3.XML元素及属性
-
什么是xml元素?
从(且包括)开始标签直到(且包括)结束标签的部分。
<course> <name>HTML</name> <!--这是子元素--> <time>10</time> <!--这是子元素--> <teacher>xiaocheng</teacher> <!--这是子元素--> </course> <!--上述代码中整段代码是XML元素,其中<name>HTML</name>、<time>10</time>、<teacher>xiaocheng</teacher> 都是XML元素--> <!-- <name>是开始标签,</name>是结束标签 -->
-
XML 命名规则
XML 元素必须遵循以下命名规则:
- 名称可以含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能以字符 “xml”(或者 XML、Xml)开始
- 名称不能包含空格
可使用任何名称,没有保留的字词。
-
XML属性,为XML元素提供额外信息
<course date="21/04/2021"> <!-- 这其中id就是course元素的属性,其值需用”“括起 --> <name>HTML</name> <time>10</time> <teacher>xiaocheng</teacher> </course>
-
对XML属性的处理
元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。
因使用属性而引起的一些问题:
- 属性无法包含多重的值(元素可以)
- 属性无法描述树结构(元素可以)
- 属性不易扩展(为未来的变化)
- 属性难以阅读和维护
<!-- 上述例子写为此例: --> <course> <date> <day>21</day> <month>04</month> <year>2021</year> </date> <id>0001</id> <name>HTML</name> <time>10</time> <teacher>xiaocheng</teacher> </course>
而当ID 仅仅是一个标识符,用于标识不同的便签,不是便签数据的组成部分时写成属性:
<?xml version="1.0" encoding="UTF-8" ?> <courses> <course id="0001"> <name>java</name> <time>20</time> <teacher>xiaocheng</teacher> </course> <course id="0002"> <name>HTML</name> <time>10</time> <teacher>xiaocheng</teacher> </course> <course id="0003"> <name>XML</name> <time>2</time> <teacher>xiaocheng</teacher> </course> </courses>
XML验证
拥有正确语法的 XML 被称为“形式良好”的 XML。
通过 DTD 验证的 XML 是“合法”的 XML。
通过上述两步之后形成的xml才是有效的xml文件。
DTD
文件中描述并规定了元素、属性和其他内容在xml文档中的使用规则。DTD文件的后缀名为 .dtd 。
主要作用是验证数据,验证数据是否达到标准,验证外来数据是否符合标准。
DTD语法
-
DTD的声明
-
DTD的内部声明
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE students [ <!ELEMENT students (student)*> <!ELEMENT student (name,gender,age,com)> <!ELEMENT name (#PCDATA)> <!ELEMENT gender (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT com (#PCDATA)> <!ATTLIST student id CDATA #REQUIRED> ]> <students> <student id="1"> <name>张三</name> <gender>2104</gender> <age>18</age> <com>company</com> </student> </students>
-
DTD的外部声明
student.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE students SYSTEM "stu.dtd"> <students> <student id="1"> <name>张三</name> <gender>2104</gender> <age>18</age> <com>company</com> </student> </students>
stu.dtd
<!ELEMENT students (student)*> <!ELEMENT student (name,gender,age,com)> <!ELEMENT name (#PCDATA)> <!ELEMENT gender (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT com (#PCDATA)> <!ATTLIST student id CDATA #REQUIRED>
-
-
DTD元素语法格式
<!ELEMENT 元素名 (内容模式)>
() 用来给元素分用组
| 在列出的元素中选择一个- EMPTY:元素不能包含子元素和文本(空元素)
- (#PCDATA):可以包含任何字符数据,但是不能在其中包含任何子元素
- ANY:元素内容为任意的,主要是使用在元素内容不确定的情况下
- 修饰符:() | + * ? ,
+表示该元素最少出现一次,可以出现多次 (1或n次)
*表示该元素允许出现零次到任意多次(0到n次)
?表示该元素可以出现,但只能出现一次 (0到1次)
,对象必须按指定的顺序出现
-
属性的语法格式:
<!ATTLIST 元素名称 属性名称 属性类型 属性特点 属性名称 属性类型 属性特点 >
- 属性类型:
- CDATA:属性值可以是任何字符(包括数字和中文)
- ID:属性值必须唯一,属性值必须满足xml命名规则
- IDREF:属性的值指向文档中其它地方声明的ID类型的值。
- IDREFS:同IDREF,但是可以具有由空格分开的多个引用。
- enumerated:(枚举值1|枚举值2|枚举值3...),属性值必须在枚举值中
- 属性特点:
-
REQUIRED:元素的所有示例都必须有该属性
-
IMPLIED :属性可以不出现
- default-value:属性可以不出现,但是会有默认值
-
FIXED :属性可以不出现,但是如果出现的话必须是指定的属性值
-
- 属性类型: