Xml-DTD和Schema

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

一、XML語(yǔ)法

  
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(歐美拉丁字母符號(hào),沒(méi)有中文)   
        standalone指明xml是否獨(dú)立,默認(rèn)值yes表明不依賴其他文檔,no表明依賴其他文檔(很多解析器都會(huì)忽略此屬性)  
    
    ②處理指令PI
        <?xml-stylesheet type="text/css" href="xxx.css"?>為XML指定樣式css顯示

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

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

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

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

二、XML約束

1、DTD是XML約束文件(.dtd),約束xml寫(xiě)法,并對(duì)xml校驗(yàn)

    
①外部引入,在外部文件中寫(xiě)DTD,必須用utf-8編碼保存
    <!DOCTYPE 根元素名稱 SYSTEM 文件位置>
        SYSTEM表明dtd在當(dāng)前文件系統(tǒng)中,后面文件位置是當(dāng)前硬盤(pán)中的位置     
    <!DOCTYPE 根元素名稱 PUBLIC "DTD名稱" "DTD文件URL">
        PUBLIC表明dtd在網(wǎng)絡(luò)公共位置中,后面指明dtd名字和所在網(wǎng)絡(luò)URL地址
    
②內(nèi)部引入,在xml中直接寫(xiě)<!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表明屬性值在文檔中唯一,只能以字母或下劃線開(kāi)頭
    屬性約束:
        #REQUIRED表明當(dāng)前屬性必須存在
        #IMPLIED表明當(dāng)前屬性可選
        #FIXED表明當(dāng)前屬性具有固定值
        '默認(rèn)值'表明當(dāng)前屬性具有默認(rèn)值

⑤實(shí)體ENTITY,對(duì)一段重復(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)系人 編號(hào) ID #REQUIRED>
]>
<聯(lián)系人列表>
    <聯(lián)系人 編號(hào)="a1">
        <姓名>張三</姓名>
        <EMAIL>zhang@it315.org</EMAIL>
    </聯(lián)系人>
    <聯(lián)系人 編號(hào)="a2">
        <姓名>李四</姓名>
        <EMAIL>li@it315.org</EMAIL>
    </聯(lián)系人>
</聯(lián)系人列表>

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


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

Schema文檔必須有一個(gè)根結(jié)點(diǎn)(稱為Schema)  
名稱空間xmlns:全世界唯一標(biāo)識(shí)某個(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='書(shū)架' >
        <xs:complexType>
            <xs:sequence maxOccurs='unbounded' >
                <xs:element name='書(shū)' >
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name='書(shū)名' 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)來(lái)源于book.xsd文件(可以是網(wǎng)絡(luò)地址)
xmlns:my指定名稱空間(www.xxx.com)別名為my
<my:書(shū)架 xmlns:w3="http://www.w3.org/2001/XMLSchema-instance"
        w3:schemaLocation="www.xxx.com book.xsd"
        xmlns:my="www.xxx.com">
    <my:書(shū)>
        <my:書(shū)名>JavaScript網(wǎng)頁(yè)開(kāi)發(fā)</my:書(shū)名>
        <my:作者>張孝祥</my:作者>
        <my:售價(jià)>28.00元</my:售價(jià)>
    </my:書(shū)>
</my:書(shū)架>

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

簡(jiǎn)書(shū): http://www.itdecent.cn/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)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容