您好,登錄后才能下訂單哦!
在XML技術(shù)中,可以編寫一個(gè)文檔來約束一個(gè)XML文檔的書寫規(guī)范,這稱之為XML約束。
作用 | 制定者 | |
---|---|---|
XML語(yǔ)法 | 規(guī)范XML文件的基本編寫規(guī)則 | 由w3c組織制定的 |
XML約束 | 規(guī)范XML文件數(shù)據(jù)內(nèi)容格式的編寫規(guī)則 | 由開發(fā)者自行定義 |
DTD約束:語(yǔ)法相對(duì)簡(jiǎn)單,功能也相對(duì)簡(jiǎn)單。學(xué)習(xí)成本也低。
Schema約束:語(yǔ)法相對(duì)復(fù)雜,功能也相對(duì)強(qiáng)大。學(xué)習(xí)成本相對(duì)高?。。。Q空間)
DTD(Document Type Definition):文檔類型定義
三種方式:內(nèi)部DTD、引用本地DTD和引用公共DTD
語(yǔ)法:
<!DOCTYPE 根元素 [元素聲明]>
實(shí)例:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note[ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> <to>美國(guó)</to> <from>中國(guó)</from> <heading>Hello</heading> <body>主體</body> </note>
語(yǔ)法:
<!DOCTYPE 根元素 SYSTEM "文件名">
實(shí)例:
文件note.dtd
<!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>
文件note.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note SYSTEM "note.dtd"> <note> <to>美國(guó)</to> <from>中國(guó)</from> <heading>Hello</heading> <body>主體</body> </note>
語(yǔ)法:
<!DOCTYPE 根元素 PUBLIC "DTD名稱" "DTD文件的URL">
實(shí)例:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
元素聲明使用下面的語(yǔ)法:
<!ELEMENT 元素名稱 類別>
或者
<!ELEMENT 元素名稱 (元素內(nèi)容)>
類別:
類型 | 類型值 | 作用 |
---|---|---|
空標(biāo)簽 | EMPTY | 表示元素一定是空元素 |
普通字符串 | (#PCDATA) | 表示元素的內(nèi)容一定是普通字符串(不能含有子標(biāo)簽) |
任何內(nèi)容 | ANY | 表示元素的內(nèi)容可以是任意內(nèi)容(包括子標(biāo)簽) |
(元素內(nèi)容)
順序問題:<!ELEMENT 元素名稱 (子元素名稱 1,子元素名稱 2,.....)> 按順序出現(xiàn)子標(biāo)簽
次數(shù)問題:
標(biāo)簽 | 含義 | 語(yǔ)法 | 示例 |
---|---|---|---|
(空) | 必須且只出現(xiàn)1次 | <!ELEMENT 元素名稱 (子元素名稱)> | <!ELEMENT note (message)> |
+ | 至少出現(xiàn)1次 | <!ELEMENT 元素名稱 (子元素名稱+)> | <!ELEMENT note (message+)> |
* | 0或n次 | <!ELEMENT 元素名稱 (子元素名稱*)> | <!ELEMENT note (message*)> |
? | 0 或1次 | <!ELEMENT 元素名稱 (子元素名稱?)> | <!ELEMENT note (message?)> |
語(yǔ)法:
<!ATTLIST 元素名稱 屬性名稱 屬性類型 默認(rèn)值>
或
<!ATTLIST 元素名稱 屬性名稱 屬性類型 默認(rèn)值 屬性名稱 屬性類型 默認(rèn)值 ... >
默認(rèn)值:
#REQUIRED 屬性值是必需的
#IMPLIED 屬性不是必需的
#FIXED value 屬性不是必須的,但屬性值是固定的
屬性類型:控制屬性值的
CDATA :表示普通字符串
(en1|en2|..): 表示一定是任選其中的一個(gè)值,枚舉值
ID:表示在一個(gè)xml文檔中該屬性值必須唯一。值不能以數(shù)字開頭
實(shí)體是用于定義引用普通文本或特殊字符的快捷方式的變量。
在DTD定義中,通過定義一個(gè)實(shí)體,在 XML文件中就可以引用這個(gè)實(shí)體了。
語(yǔ)法:
<!ENTITY 實(shí)體名稱 "實(shí)體的值">
實(shí)例:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE Persons[ <!ENTITY author "張三"> <!ENTITY home "中國(guó) 北京"> ]> <Persons> &author;住在&home; </Persons>
展示:
注釋: 一個(gè)實(shí)體由三部分構(gòu)成: 一個(gè)和號(hào) (&), 一個(gè)實(shí)體名稱, 以及一個(gè)分號(hào) (;)。
XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 描述 XML 文檔的結(jié)構(gòu)。
XML Schema 語(yǔ)言也稱作 XML Schema 定義(XML Schema Definition,XSD)。
XML Schema符合XML語(yǔ)法結(jié)構(gòu),本身就是XML文檔
DTD文檔的結(jié)構(gòu)是平鋪性,如果定義復(fù)雜的XML文檔,很難把握各元素之間的嵌套關(guān)系, Schema相對(duì)文檔結(jié)構(gòu)較強(qiáng)
XML Schema比DTD支持更多的數(shù)據(jù)類型,并支持用戶自定義數(shù)據(jù)類型
XML Schema定義約束的能力更強(qiáng)大
XML Schema 對(duì)命名空間進(jìn)行支持
Schema本身就是一個(gè)XML文檔,但擴(kuò)展名為.xsd。
一個(gè)Schema文檔通常稱之為約束文檔,遵循這個(gè)約束書寫的XML文件稱之為實(shí)例文檔。
和XML文件一樣,一個(gè)Schema文檔必須有一個(gè)根節(jié)點(diǎn),并且這個(gè)根節(jié)點(diǎn)的名稱必須為schema。
編寫一個(gè)Schema文檔后,通常需要把這個(gè)文件中聲明元素綁定到一個(gè)URI上, 在XML Schema技術(shù)中有一個(gè)專業(yè)術(shù)語(yǔ)來描述這個(gè)過程,即把XML Schema文檔聲明的元素綁定到一個(gè)名稱空間上, 以后XML文件就可能通過這個(gè)URI(即名稱空間)來告訴解析引擎,XML文檔中編寫的元素來自哪里,被誰(shuí)約束。
books.xsd(XML Schema文件)
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.rk.com/books" elementFormDefault="qualified"> <!-- targetNamespace 表示當(dāng)前XML Schema文檔中聲明的元素定義在http://www.rk.com/books命名空間中 --> <!-- elementFormDefault="qualified"表示在此schema中聲明過的元素必須被命名空間限定 --> <element name="books"><!-- name屬性表示當(dāng)前元素的“標(biāo)簽名” --> <complexType><!-- 復(fù)雜元素,由complexType進(jìn)行定義 --> <sequence><!-- 子元素序列 --> <element name="book" maxOccurs="unbounded"> <complexType> <sequence> <element name="title" type="string"/><!-- 簡(jiǎn)單元素,由type屬性進(jìn)行定義 --> <element name="price" type="double"/> <any></any><!-- 后面可以任意寫 --> </sequence> <!-- 屬性的聲明 一般寫到 sequence 的后面 --> <attribute name="id" type="ID" use="required"/> </complexType> </element> </sequence> </complexType> </element> </schema>
books.xml(XML實(shí)例文件)
<?xml version="1.0" encoding="UTF-8"?> <rk:books xmlns:rk="http://www.rk.com/books" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.rk.com/books books.xsd "> <!-- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 是固定寫法,實(shí)例命名空間 --> <!-- xsi:schemaLocation此屬性就有兩個(gè)值:第一值是需要使用的命名空間;第二個(gè)值是該命名空間使用的XML Schema的位置 --> <rk:book id="b1"> <rk:title>往事并不如煙</rk:title> <rk:price>49.9</rk:price> </rk:book> <rk:book id="b02"> <rk:title>XML學(xué)習(xí)</rk:title> <rk:price>23.2</rk:price> </rk:book> </rk:books>
booksWithDefaultNameSpace.xml(XML實(shí)例文件)
<?xml version="1.0" encoding="UTF-8"?> <books xmlns="http://www.rk.com/books" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.rk.com/books books.xsd "> <!-- 使用默認(rèn)命名空間 格式:xmlns="http://www.rk.com/books" --> <!-- 一個(gè)XML實(shí)例文檔只允許有一個(gè)默認(rèn)命名空間 --> <book id="b1"> <title>最后的貴族</title> <price>49.9</price> </book> </books>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。