Xml-DTD和Schema

定義:XML是一種數(shù)據(jù)傳輸和存儲格式微姊,用標(biāo)簽保存數(shù)據(jù)內(nèi)容酸茴,利用標(biāo)簽嵌套關(guān)系保存數(shù)據(jù)之間關(guān)系
應(yīng)用場景:不同平臺間數(shù)據(jù)傳輸、程序配置文件
存在形式:XML文件兢交、也存在內(nèi)存或網(wǎng)絡(luò)中薪捍,不要把XML狹隘理解為XML文件
校驗(yàn):瀏覽器內(nèi)置Html和XML解析器,可以校驗(yàn)xml是否正確

一配喳、XML語法

  
1酪穿、聲明或處理指令PI(processing instruction),指定解析器如何解析顯示XML文檔
    ①聲明前不能有任何內(nèi)容(如注釋)
        <?xml version="1.0" encoding="utf-8" standalone="yes"?>  
        version必須存在,當(dāng)前xml所遵循規(guī)范版本1.0     
        encoding指定xml解析編碼,必須和xml文件保存編碼一致,默認(rèn)值iso8859-1(歐美拉丁字母符號晴裹,沒有中文)   
        standalone指明xml是否獨(dú)立,默認(rèn)值yes表明不依賴其他文檔,no表明依賴其他文檔(很多解析器都會忽略此屬性)  
    
    ②處理指令PI
        <?xml-stylesheet type="text/css" href="xxx.css"?>為XML指定樣式css顯示

2被济、元素(xml標(biāo)簽)
    只能包含一個(gè)根標(biāo)簽   
    一個(gè)元素分為開始和結(jié)束標(biāo)簽<a>xxx</a>,其間有文本內(nèi)容(標(biāo)簽體)  
    一個(gè)元素不含任何內(nèi)容為自閉標(biāo)簽<a/>  
    區(qū)分大小寫如<A>和<a>是不同標(biāo)記  
    命名不能以數(shù)字涧团、標(biāo)點(diǎn)符號只磷、"_"、"xml"開頭,不能包含空格泌绣、冒號  

3钮追、一個(gè)元素可以有多個(gè)屬性,屬性值用單引號或雙引號<a size="xxx" color="xxx"/>,屬性名遵循元素命名規(guī)則

4、<!-- 注釋內(nèi)容 -->阿迈,除了聲明前外可在任意位置元媚、不能嵌套注釋  

5、轉(zhuǎn)義字符/CDATA苗沧,可以使解析器將轉(zhuǎn)義內(nèi)容當(dāng)作普通文本來處理
    ①轉(zhuǎn)義字符  
        &: &amp;  
        <: &lt;  
        >: &gt;  
        ": &quot;  
        ': &apos;
    ②<![CDATA[內(nèi)容]]>
        被括起來的內(nèi)容刊棕,會被瀏覽器當(dāng)作普通文本來處理
    
    區(qū)別:  
        CDATA可以成段的進(jìn)行轉(zhuǎn)義,而轉(zhuǎn)義字符一次只能轉(zhuǎn)義一個(gè)字符  
        CDATA可以保存原始數(shù)據(jù)待逞,只通知解析器按普通文本去處理  
        轉(zhuǎn)義字符改變了原始數(shù)據(jù)甥角,用其他字符替代
        

二、XML約束

1识樱、DTD是XML約束文件(.dtd)蜈膨,約束xml寫法,并對xml校驗(yàn)

    
①外部引入,在外部文件中寫DTD,必須用utf-8編碼保存
    <!DOCTYPE 根元素名稱 SYSTEM 文件位置>
        SYSTEM表明dtd在當(dāng)前文件系統(tǒng)中,后面文件位置是當(dāng)前硬盤中的位置     
    <!DOCTYPE 根元素名稱 PUBLIC "DTD名稱" "DTD文件URL">
        PUBLIC表明dtd在網(wǎng)絡(luò)公共位置中,后面指明dtd名字和所在網(wǎng)絡(luò)URL地址
    
②內(nèi)部引入,在xml中直接寫<!DOCTYPE 根元素名稱 [dtd約束的內(nèi)容]>

③約束元素 <!ELEMENT 元素名稱 元素約束>  
    元素約束:
        ANY表示包含任意子元素
        EMPTY表示不含子元素
        ()表示子元素
        ,表示子元素必須按順序并列出現(xiàn)
        |表示子元素出現(xiàn)其中之一
        #PCDATA表示包含標(biāo)簽體
        +表示一次或多次
        *表示0次或多次
        ?表示0次或一次
        組合:<!ELEMENT 元素名稱 ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>
    
④約束屬性 <!ATTLIST 元素名 屬性名 屬性類型 屬性約束>  
    屬性類型:
        CDATA表明普通字符串
        ENUMERATED表明取指定枚舉列表值
        ID表明屬性值在文檔中唯一,只能以字母或下劃線開頭
    屬性約束:
        #REQUIRED表明當(dāng)前屬性必須存在
        #IMPLIED表明當(dāng)前屬性可選
        #FIXED表明當(dāng)前屬性具有固定值
        '默認(rèn)值'表明當(dāng)前屬性具有默認(rèn)值

⑤實(shí)體ENTITY,對一段重復(fù)使用的內(nèi)容引用牺荠、復(fù)用
    引用實(shí)體,在xml中引用的實(shí)體
        定義實(shí)體:<!ENTITY 實(shí)體名稱 “實(shí)體內(nèi)容” >
        使用實(shí)體:&實(shí)體名稱;     
    參數(shù)實(shí)體,在dtd中引用的實(shí)體
        定義實(shí)體:<!ENTITY %實(shí)體名稱 "實(shí)體內(nèi)容">
        使用實(shí)體:%實(shí)體名稱;
    
實(shí)例:
<?xml version = "1.0" encoding="utf-8" ?>
<!DOCTYPE 聯(lián)系人列表[
    <!ELEMENT 聯(lián)系人列表 ANY>
    <!ELEMENT 聯(lián)系人 (姓名,EMAIL)>
    <!ELEMENT 姓名 (#PCDATA)>
    <!ELEMENT EMAIL (#PCDATA)>
    <!ATTLIST 聯(lián)系人 編號 ID #REQUIRED>
]>
<聯(lián)系人列表>
    <聯(lián)系人 編號="a1">
        <姓名>張三</姓名>
        <EMAIL>zhang@it315.org</EMAIL>
    </聯(lián)系人>
    <聯(lián)系人 編號="a2">
        <姓名>李四</姓名>
        <EMAIL>li@it315.org</EMAIL>
    </聯(lián)系人>
</聯(lián)系人列表>

2翁巍、Schema也是xml約束文件(.xsd),目的是為了克服DTD缺陷


1)Schema本身符合xml語法,方便解析
2)對名稱空間支持有非常好
3)比DTD更多數(shù)據(jù)類型,并且自定義數(shù)據(jù)類型
4)語義約束更精確,強(qiáng)于DTD
5)比DTD復(fù)雜多,學(xué)習(xí)成本高

Schema文檔必須有一個(gè)根結(jié)點(diǎn)(稱為Schema)  
名稱空間xmlns:全世界唯一標(biāo)識某個(gè)資源(通常是公司域名),僅是名稱,不是真實(shí)的資源地址

實(shí)例: 
XSD文件(book.xsd)
<?xml version="1.0" encoding="UTF-8" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
        targetNamespace="www.xxx.com"
        elementFormDefault="qualified">
    <xs:element name='書架' >
        <xs:complexType>
            <xs:sequence maxOccurs='unbounded' >
                <xs:element name='書' >
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name='書名' type='xs:string' />
                            <xs:element name='作者' type='xs:string' />
                            <xs:element name='售價(jià)' type='xs:string' />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

XML文件(.xml)
xmlns:w3指定名稱空間(http://www.w3.org/2001/XMLSchema-instance)別名為w3
w3:schemaLocation指定名稱空間(www.xxx.com)來源于book.xsd文件(可以是網(wǎng)絡(luò)地址)
xmlns:my指定名稱空間(www.xxx.com)別名為my
<my:書架 xmlns:w3="http://www.w3.org/2001/XMLSchema-instance"
        w3:schemaLocation="www.xxx.com book.xsd"
        xmlns:my="www.xxx.com">
    <my:書>
        <my:書名>JavaScript網(wǎng)頁開發(fā)</my:書名>
        <my:作者>張孝祥</my:作者>
        <my:售價(jià)>28.00元</my:售價(jià)>
    </my:書>
</my:書架>

XML文件(.xml)
xmlns="www.xxx.com"可以忽略my 沒有前綴默認(rèn)使用這個(gè)空間
<書架 xmlns:w3="http://www.w3.org/2001/XMLSchema-instance"
     w3:schemaLocation="www.xxx.com book.xsd"
     xmlns="www.xxx.com">
    <書>
        <書名>JavaScript網(wǎng)頁開發(fā)</書名>
        <作者>張孝祥</作者>
        <售價(jià)>28.00元</售價(jià)>
    </書>
</書架>

簡書: http://www.reibang.com/p/a0aaef0900f9
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/54355152
GitHub博客:http://lioil.win/2017/01/11/Xml-DTD-Schema.html
Coding博客:http://c.lioil.win/2017/01/11/Xml-DTD-Schema.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市休雌,隨后出現(xiàn)的幾起案子灶壶,更是在濱河造成了極大的恐慌,老刑警劉巖杈曲,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驰凛,死亡現(xiàn)場離奇詭異胸懈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)恰响,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門趣钱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胚宦,你說我怎么就攤上這事首有。” “怎么了枢劝?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵井联,是天一觀的道長。 經(jīng)常有香客問我您旁,道長烙常,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任鹤盒,我火速辦了婚禮蚕脏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘侦锯。我一直安慰自己驼鞭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布率触。 她就那樣靜靜地躺著终议,像睡著了一般汇竭。 火紅的嫁衣襯著肌膚如雪葱蝗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天细燎,我揣著相機(jī)與錄音两曼,去河邊找鬼。 笑死玻驻,一個(gè)胖子當(dāng)著我的面吹牛悼凑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播璧瞬,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼户辫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嗤锉?” 一聲冷哼從身側(cè)響起渔欢,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瘟忱,沒想到半個(gè)月后奥额,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苫幢,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年垫挨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了韩肝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡九榔,死狀恐怖哀峻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情帚屉,我是刑警寧澤谜诫,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站攻旦,受9級特大地震影響喻旷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜牢屋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一且预、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧烙无,春花似錦锋谐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至迂苛,卻和暖如春三热,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背三幻。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工就漾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人念搬。 一個(gè)月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓抑堡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親朗徊。 傳聞我的和親對象是個(gè)殘疾皇子首妖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. XML簡介 以下內(nèi)容來自于http://www.w3school.com.cn/xml 基本知識 XML 和...
    WebSSO閱讀 1,916評論 1 7
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)爷恳,斷路器有缆,智...
    卡卡羅2017閱讀 134,668評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,183評論 25 707
  • 雖然是紅燈妒貌,他還是很自然地加入了前面過馬路的人群通危。嘿,電視臺來偷拍也無所謂灌曙,到時(shí)候不可能罰我一個(gè)菊碟,反正大家都……“...
    洞庭府君閱讀 563評論 0 5
  • 這次南京之行 回來后 想寫點(diǎn)東西給閨蜜給好友 致我們的友誼 【1】...
    Hocx閱讀 408評論 0 0