很多朋友和我一樣初學(xué)XML,我也是一個(gè)初學(xué)XML的新手,讓我們?cè)谟懻撝袑W(xué)習(xí)XML.
看過(guò)很多教程,大家還會(huì)問(wèn)同樣一個(gè)問(wèn)題,XML是什么?XML是有什么用?這類問(wèn)題.
我以自己的話來(lái)說(shuō)明這些問(wèn)題.
一個(gè)正確的概念很重要,其碼不會(huì)失去方向.下面引用一位朋友的貼子來(lái)作回答:
XML初學(xué)者普遍存在的問(wèn)題
1。XML是什么?(不要說(shuō)是可擴(kuò)展的標(biāo)記語(yǔ)言之類的話)
2。XML可以做什么?怎么做?(不需要回答,只需要列舉出一個(gè)簡(jiǎn)單的例子即可)
1: XML,是用來(lái)描迷數(shù)據(jù)的.
2:舉一個(gè)例子說(shuō)明:有A數(shù)據(jù)庫(kù) B數(shù)據(jù)庫(kù),他們之間的標(biāo)準(zhǔn)不同,不能互傳.那么你可以把數(shù)據(jù)放在XML中,而后就可以讓A,B之間可以共同傳輸數(shù)據(jù)了.
補(bǔ)充:
首先要有一個(gè)概念,你最好不要去用XML設(shè)計(jì)網(wǎng)頁(yè),不是說(shuō)不可以, 只是要說(shuō)明,XML不是HTML的替代.
有了這個(gè)概念,就不會(huì)有很多的看完一個(gè)一個(gè)的教程,還不知道XML做什么,很明了
XML就是為了描述數(shù)據(jù)
開(kāi)始學(xué)習(xí)XML:
1.工具:XMLSPY2005,個(gè)人喜歡英文版.(當(dāng)前下的2006英文版,注冊(cè)有問(wèn)題)
2.學(xué)習(xí)XML從那里開(kāi)始?
即我要說(shuō)明的是:先寫(xiě)XML還是先寫(xiě)DTD或是XML Schemas.
大多的教程從XML說(shuō)起,再說(shuō)DTD...再說(shuō)XML Schemas...
不過(guò)我個(gè)人覺(jué)的,先了解一下XML的基本語(yǔ)法,而后跳過(guò)DTD,從Schemas開(kāi)始.
這樣不會(huì)讓DTD搞的沒(méi)興趣..而后再對(duì)DTD作一定了解.這里要說(shuō)明,我覺(jué)的先寫(xiě)
好一個(gè)Schemas再寫(xiě)XML比較好.即,先建立模型.再去填數(shù)據(jù).
(這只是我自己的愛(ài)好,朋友們別扔板磚)
下面的先從一個(gè)很簡(jiǎn)單的例子開(kāi)始,讓大家有點(diǎn)興趣...
1.打開(kāi)XMLSPY2005.點(diǎn)新建
此主題相關(guān)圖片如下:

選XSD W3C XML Schemas.
2.
此主題相關(guān)圖片如下:

作如圖修改,而后點(diǎn)左側(cè)的圖標(biāo),進(jìn)入下圖
3.
此主題相關(guān)圖片如下:

在Book上點(diǎn)右鍵選擇Add child-->sequence.插入一個(gè)容器
此主題相關(guān)圖片如下:

4.在剛剛的容器上再點(diǎn)右鍵.作Add child-->ELEMENT
此主題相關(guān)圖片如下:

5.做如下填加,如Setup 4.
此主題相關(guān)圖片如下:

6.點(diǎn)選最下面的TEXT.如圖
此主題相關(guān)圖片如下:

這里是源碼.
到這里實(shí)際上我們做了一個(gè)XML Schemas.很簡(jiǎn)單,以后在說(shuō)明
具體的意思.
我們現(xiàn)在可以點(diǎn)另存為,存為First.xsd.
下面建立關(guān)于這個(gè)這個(gè)Schemas的XML文件.
再次選新建(不用關(guān)閉剛剛的XSD文件),這次選XML DOCUMNET文件.
出現(xiàn)下圖:
此主題相關(guān)圖片如下:

選Schema.指定剛剛的XSD的保存路徑.
這時(shí)打開(kāi)是以TEXT方式,我還是選最下面的Gird,出現(xiàn)下圖:
此主題相關(guān)圖片如下:

作如下圖的改動(dòng):
此主題相關(guān)圖片如下:

點(diǎn)保存為:First.xml
那么你此時(shí)可以點(diǎn)下邊的TEXT.回到代碼方式.就可以看到XML文件的內(nèi)容.
你一定聽(tīng)說(shuō)過(guò)"好的格式"與"有效格式"的概念.
到這里,你建立了一個(gè)Schemas文件,一個(gè)XML文件.
按F5,你可以檢查這個(gè)XML文件是不是一個(gè)"好的格式",再按F8你可以查看他
是不是一個(gè)"有效的格式".
先看一下First.xml的代碼:
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2005 rel. 3 U (
http://www.altova.com) by () -->
<Book xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="First.xsd">
<name>XSLT</name>
<author>Michael Kay</author>
<price>$34.99USA</price>
</Book>
是不是很容易理解.可能不能理解就是那一長(zhǎng)串的"網(wǎng)址",那是一個(gè)很重的概念.
NAMESPACE.這個(gè)先不說(shuō),我們看代碼:
<Book>
<name>XSLT</name>
<author>Michael Kay</author>
<price>$34.99USA</price>
</Book>
<Book>...</Book>是根元素.
<name>.<author>.<price>可以說(shuō)是根元素下的子元素.
這里有幾點(diǎn)注意:
1.一定要結(jié)束標(biāo)記.如:<Book>...</Book>
2.XML元素大小寫(xiě)是不一樣的:<Book>...</book>必定出錯(cuò)
3.要合理嵌套.<Book><name>...</Book></name>是錯(cuò)的
細(xì)節(jié)很多,不詳細(xì)說(shuō)明.
其實(shí)我們現(xiàn)在就可以很容易的寫(xiě)一個(gè)XML文檔,基于這個(gè)方式.
但還是不提倡先寫(xiě)XML再寫(xiě)DTD或是Schemas.
打個(gè)比方: XML是一個(gè)人,DTD AND SCHEMAS是馬甲.首先要理解的就是我們用DTD和Schema是為了定義和約束XML的.好,我們先把這個(gè)約束和定義做好,即先做馬甲.而后再給那個(gè)人穿上..我想這樣是容易的,如果你先寫(xiě)XML再寫(xiě)馬甲的的話...呵呵
再看那個(gè)First.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Book">
<xs:annotation>
<xs:documentation>Comment describing your root element</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="name"/>
<xs:element name="author"/>
<xs:element name="price"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Schemas是以XML的表達(dá)形式定義和約束XML文件的.所以在語(yǔ)法上是相似的.
<xs:schema>...</xs:schema>是Schemas申明.后面的接著是命名空間.
<xs:element name="Book">..</xs:element>是定義了元素Book.
<xs:annotation>
<xs:documentation>Comment describing your root element</xs:documentation>
</xs:annotation>
這個(gè)是注釋.
<xs:complexType>..</xs:complex>復(fù)雜類型申明.[有的朋友會(huì)問(wèn),還沒(méi)學(xué)簡(jiǎn)單類型就學(xué)復(fù)雜類型,這不是...,不過(guò)說(shuō)真的,先說(shuō)復(fù)雜類型還是好理解.]
<xs:sequence>...</xs:sequence>這其實(shí)就是在最初的時(shí)候所說(shuō)的容器.相同的還有另外兩個(gè)<all>...</all> and <choice>..</choice> sequence是順序出現(xiàn),all是亂序出現(xiàn),choice選擇性出現(xiàn).如果你要在復(fù)雜類型里加入別的元素或是屬性的話,那么必定有一個(gè)
容器!
<xs:element name="name"/>
<xs:element name="author"/>
<xs:element name="price"/>
這三個(gè)是在Sequence包圍中,現(xiàn)在可以理解容器的概念了吧..
上面還有一個(gè)要說(shuō)的.
<xs:element name="name"/>這其實(shí)是個(gè)空元素.在XML中空元素的申明就是這樣子的.
這東西就不需要額外的結(jié)束標(biāo)記了.
這是對(duì)兩段代碼的簡(jiǎn)單分析...
寫(xiě)一XML文檔作一小結(jié):
1.元素,屬性和值
<name language="english">Tiger</name>
2.書(shū)寫(xiě)XML的規(guī)則
1).根元素是必須的
2).結(jié)束標(biāo)記是必須的
3).元素的嵌套要適當(dāng)
4).大小寫(xiě)敏感
5).值必放在引號(hào)內(nèi)
3.申明XML版本.
<?xml version="1.0" encoding="UTF-8"?>
也就這形式,注意后的UTF.如果你有中文內(nèi)容,改成gb2312吧
這個(gè)encoding是可選的
只有這一個(gè)例外.沒(méi)有結(jié)束標(biāo)記
<? ..... ?>
4.增加屬性,屬性是給元素增加一個(gè)額外的信息
<name
language="English">
5.空元素
兩種表式法:
<name></name>
OR</name>
兩者是相同
6.注解:<!-- -->
7.五個(gè)特殊的符號(hào)
& & amp;
< & lt;
> & gt;
" & quot;
' & apos;
想在XML里表達(dá)出前面的符號(hào),就用后面的代替.
差不多這就些吧..
XML Schema
XML Schema提供一個(gè)更豐富的XML文檔結(jié)構(gòu)定義,Schema是XML所寫(xiě),用XML規(guī)范改寫(xiě)的
DTD,同時(shí)增加擴(kuò)充功能.
特點(diǎn):1.一致性,與XML一致.可被XML編輯器編輯,可被XML分析器解析.
2.擴(kuò)展性.對(duì)DTD進(jìn)行擴(kuò)充,引入數(shù)據(jù)類型
3.易用性.XML API(DOM AND SAX)只對(duì)XML實(shí)例有效.對(duì)DTD無(wú)效.
Schemas可用DOM 和SAX方式
4.規(guī)范性,Schema用元素內(nèi)容和屬性來(lái)定義文檔的整體結(jié)構(gòu),如那些元素可出現(xiàn),元素間的關(guān)系,元素內(nèi)容和屬性,以及元素出現(xiàn)的順序.
5.互換性.可交換彼此的Schema
(轉(zhuǎn)載自“中國(guó)XML論壇”作者“starting”)