返回首页

微信公众号

1、基礎(chǔ)知識(shí)

基礎(chǔ)知識(shí):

1、xml:

XML 指可擴(kuò)展標(biāo)記語言
XML 被設(shè)計(jì)用來傳輸和存儲(chǔ)數(shù)據(jù)
HTML 被設(shè)計(jì)用來顯示數(shù)據(jù)

XML與HTML的主要差異:
XML不是HTML的替代。
XML和HTML為不同的目的而設(shè)計(jì):
XML被設(shè)計(jì)為傳輸和存儲(chǔ)數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的內(nèi)容。
HTML被設(shè)計(jì)用來顯示數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的外觀。
HTML旨在顯示信息,而XML旨在傳輸信息。

一個(gè) XML 文檔實(shí)例
XML 使用簡(jiǎn)單的具有自我描述性的語法:

1
2
3
4
5
6
7
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

解釋:
第一行是 XML 聲明
<note> 描述文檔的根元素
接下來 4 行描述根的 4 個(gè)子元素(to, from, heading 以及 body)
最后一行 </note> 定義根元素的結(jié)尾

XML 語法規(guī)則:
所有 XML 元素都須有關(guān)閉標(biāo)簽
XML 標(biāo)簽對(duì)大小寫敏感
XML 必須正確地嵌套
XML 必須正確地嵌套
XML 的屬性值須加引號(hào)

實(shí)體引用
在 XML 中,一些字符擁有特殊的意義。
如果你把字符 "<" 放在 XML 元素中,會(huì)發(fā)生錯(cuò)誤,這是因?yàn)榻馕銎鲿?huì)把它當(dāng)作新元素的開始。為了避免這個(gè)錯(cuò)誤,請(qǐng)用實(shí)體引用來代替 "<" 字符:

1
<message>if salary < 1000 then</message>

在 XML 中,有 5 個(gè)預(yù)定義的實(shí)體引用:

1
2
3
4
5
<    <    小于
>    >    大于
&amp;   &   和號(hào)
&apos;  '   單引號(hào)
"   "   引號(hào)

2、DTD

文檔類型定義(DTD)可定義合法的XML文檔構(gòu)建模塊。它使用一系列合法的元素來定義文檔的結(jié)構(gòu)。
DTD 可被成行地聲明于 XML 文檔中,也可作為一個(gè)外部引用。

01、內(nèi)部的 DOCTYPE 聲明

假如 DTD 被包含在您的 XML 源文件中,它應(yīng)當(dāng)通過下面的語法包裝在一個(gè) DOCTYPE 聲明中:

<!DOCTYPE 根元素 [元素聲明]>

一個(gè)實(shí)例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0"?>
<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]>
<note>
  <to>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting!</body>
</note>

以上 DTD 解釋如下:
!DOCTYPE note (第二行)定義此文檔是 note 類型的文檔。
!ELEMENT note (第三行)定義 note 元素有四個(gè)元素:"to、from、heading,、body"
!ELEMENT to (第四行)定義 to 元素為 "#PCDATA" 類型
!ELEMENT from (第五行)定義 from 元素為 "#PCDATA" 類型
!ELEMENT heading (第六行)定義 heading 元素為 "#PCDATA" 類型
!ELEMENT body (第七行)定義 body 元素為 "#PCDATA" 類型

02、外部文檔聲明

假如 DTD 位于 XML 源文件的外部,那么它應(yīng)通過下面的語法被封裝在一個(gè) DOCTYPE 定義中:

1
<!DOCTYPE 根元素 SYSTEM "文件名">

這個(gè) XML 文檔和上面的 XML 文檔相同,但是擁有一個(gè)外部的 DTD:

1
2
3
4
5
6
7
8
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

這是包含 DTD 的 "note.dtd" 文件:

1
2
3
4
5
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

XML 文檔構(gòu)建模塊
所有的 XML 文檔(以及 HTML 文檔)均由以下簡(jiǎn)單的構(gòu)建模塊構(gòu)成:
元素
屬性
實(shí)體
PCDATA
CDATA

元素是 XML 以及 HTML 文檔的主要構(gòu)建模塊。

屬性可提供有關(guān)元素的額外信息。

實(shí)體是用來定義普通文本的變量。實(shí)體引用是對(duì)實(shí)體的引用。
大多數(shù)同學(xué)都了解這個(gè) HTML 實(shí)體引用:" "。這個(gè)“無折行空格”實(shí)體在 HTML 中被用于在某個(gè)文檔中插入一個(gè)額外的空格。
當(dāng)文檔被 XML 解析器解析時(shí),實(shí)體就會(huì)被展開。

PCDATA
PCDATA 的意思是被解析的字符數(shù)據(jù)(parsed character data)。
可把字符數(shù)據(jù)想象為 XML 元素的開始標(biāo)簽與結(jié)束標(biāo)簽之間的文本。

PCDATA 是會(huì)被解析器解析的文本。這些文本將被解析器檢查實(shí)體以及標(biāo)記。
文本中的標(biāo)簽會(huì)被當(dāng)作標(biāo)記來處理,而實(shí)體會(huì)被展開。
不過,被解析的字符數(shù)據(jù)不應(yīng)當(dāng)包含任何 &、< 或者 > 字符;需要使用 &、< 以及 > 實(shí)體來分別替換它們。

CDATA
CDATA 的意思是字符數(shù)據(jù)(character data)。
CDATA 是不會(huì)被解析器解析的文本。在這些文本中的標(biāo)簽不會(huì)被當(dāng)作標(biāo)記來對(duì)待,其中的實(shí)體也不會(huì)被展開。

以下用案例重點(diǎn)說明下實(shí)體:

01、一個(gè)內(nèi)部實(shí)體聲明

語法:

1
<!ENTITY 實(shí)體名稱 "實(shí)體的值">

例子:
DTD 例子:

1
2
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">

XML 例子:

1
<author>&writer;&copyright;</author>

注釋: 一個(gè)實(shí)體由三部分構(gòu)成: 一個(gè)和號(hào) (&), 一個(gè)實(shí)體名稱, 以及一個(gè)分號(hào) (;)。

02、一個(gè)外部實(shí)體聲明

語法:

1
<!ENTITY 實(shí)體名稱 SYSTEM "URI/URL">

例子:

DTD 例子:

1
2
<!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">

XML 例子:

1
<author>&writer;&copyright;</author>

3、XML Schema

XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 描述 XML 文檔的結(jié)構(gòu)。
XML Schema 語言也稱作 XML Schema 定義(XML Schema Definition,XSD)。

XML Schema 的作用是定義 XML 文檔的合法構(gòu)建模塊,類似 DTD:

定義可出現(xiàn)在文檔中的元素<br>
定義可出現(xiàn)在文檔中的屬性<br>
定義哪個(gè)元素是子元素<br>
定義子元素的次序<br>
定義子元素的數(shù)目<br>
定義元素是否為空,或者是否可包含文本<br>
定義元素和屬性的數(shù)據(jù)類型<br>
定義元素和屬性的默認(rèn)值以及固定值<br>

下面這個(gè)例子是一個(gè)名為 "note.xsd" 的 XML Schema 文件,它定義了上面那個(gè) XML 文檔的元素:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
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>

note 元素是一個(gè)復(fù)合類型,因?yàn)樗渌淖釉亍F渌?(to, from, heading, body) 是簡(jiǎn)易類型,因?yàn)樗鼈儧]有包含其他元素。您將在下面的章節(jié)學(xué)習(xí)更多有關(guān)復(fù)合類型和簡(jiǎn)易類型的知識(shí)。

此文件包含對(duì) XML Schema 的引用:

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0"?>
<note
xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">
 
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

<schema> 元素是每一個(gè) XML Schema 的根元素,<schema> 元素可包含屬性。一個(gè) schema 聲明往往看上去類似這樣:

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0"?>
  
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
 
...
...
</xs:schema>

代碼解釋:

顯示 schema 中用到的元素和數(shù)據(jù)類型來自命名空間 "http://www.w3.org/2001/XMLSchema" 。同時(shí)它還規(guī)定了來自命名空間 "http://www.w3.org/2001/XMLSchema" 的元素和數(shù)據(jù)類型應(yīng)該使用前綴 xs:

1
xmlns:xs="http://www.w3.org/2001/XMLSchema"

顯示被此 schema 定義的元素 (note, to, from, heading, body) 來自命名空間: "http://www.w3school.com.cn"。

1
targetNamespace="http://www.w3school.com.cn"

指出默認(rèn)的命名空間是 "http://www.w3school.com.cn"。

1
xmlns="http://www.w3school.com.cn"

指出任何 XML 實(shí)例文檔所使用的且在此 schema 中聲明過的元素必須被命名空間限定。

1
elementFormDefault="qualified"

在 XML 文檔中引用 Schema:

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0"?>
 
<note xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">
 
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

代碼解釋:

下面的片斷:

1
xmlns="http://www.w3school.com.cn"

規(guī)定了默認(rèn)命名空間的聲明。此聲明會(huì)告知 schema 驗(yàn)證器,在此 XML 文檔中使用的所有元素都被聲明于 "http://www.w3school.com.cn" 這個(gè)命名空間。

一旦您擁有了可用的 XML Schema 實(shí)例命名空間:

1
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

您就可以使用 schemaLocation 屬性了。此屬性有兩個(gè)值。第一個(gè)值是需要使用的命名空間。第二個(gè)值是供命名空間使用的 XML schema 的位置:

1
xsi:schemaLocation="http://www.w3school.com.cn note.xsd"

注:學(xué)習(xí)XXE漏洞需要一定的xml基礎(chǔ)知識(shí),以上摘自w3c文檔,詳細(xì)教程參考w3c

XML教程

DTD

XSD

XSLT

XML DOM

?

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册