




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
XML語言方立勛Tip:什么是XML什么是XML,為什么學習XML?中國北京湖南湖北海淀豐臺長沙岳陽武漢荊州在現(xiàn)實生活中大量存在有關(guān)系的數(shù)據(jù),如下圖。問題:這樣的數(shù)據(jù)如何交給計算機處理呢?ExtensibleMarkupLanguage,翻譯過來為可擴展標記語言。Xml技術(shù)是w3c組織發(fā)布的,目前推薦遵循的是W3C組織于2000發(fā)布的XML1.0標準。Tip:XML技術(shù)用于解決什么問題?<?xmlversion="1.0"encoding="UTF-8"?><中國> <北京> <海淀></海淀> <豐臺></豐臺> </北京> <湖南> <長沙></長沙> <岳陽></岳陽> </湖南> <湖北> <武漢></武漢> <荊州></荊州> </湖北></中國>XML語言出現(xiàn)的根本目標在于描述上圖那種,在現(xiàn)實生活中經(jīng)常出現(xiàn)的有關(guān)系的數(shù)據(jù)。在XML語言中,它允許用戶自定義標簽。一個標簽用于描述一段數(shù)據(jù);一個標簽可分為開始標簽和結(jié)束標簽,在開始標簽和結(jié)束標簽之間,又可以使用其它標簽描述其它數(shù)據(jù),以此來實現(xiàn)數(shù)據(jù)關(guān)系的描述。例如:Tip:XML常見應(yīng)用XML技術(shù)除用于保存有關(guān)系的數(shù)據(jù)之外,它還經(jīng)常用作軟件配置文件,以描述程序模塊之間的關(guān)系。在一個軟件系統(tǒng)中,為提高系統(tǒng)的靈活性,它所啟動的模塊通常由其配置文件決定例如一個軟件在啟動時,它需要啟動A、B兩個模塊,而A、B這兩個模塊在啟動時,又分別需要A1、A2和B1、B2模塊的支持,為了準確描述這種關(guān)系,此時使用XML文件最為適宜不過。Tip:XML語法一個XML文件分為如下幾局部內(nèi)容:文檔聲明元素屬性注釋CDATA區(qū)、特殊字符處理指令〔processinginstruction〕Tip:XML語法-文檔聲明在編寫XML文檔時,需要先使用文檔聲明,聲明XML文檔的類型。最簡單的聲明語法:
<?xmlversion="1.0"?>用encoding屬性說明文檔的字符編碼:
<?xmlversion="1.0"encoding="GB2312"?>
用standalone屬性說明文檔是否獨立:
<?xmlversion="1.0"encoding="GB2312"standalone="yes"?>常見錯誤,見PPT下面的備注區(qū)Tip:元素(1)XML元素指XML文件中出現(xiàn)的標簽,一個標簽分為開始標簽和結(jié)束標簽,一個標簽有如下幾種書寫形式,例如:包含標簽體:<a></a>不含標簽體的:<a></a>,簡寫為:<a/>一個標簽中也可以嵌套假設(shè)干子標簽。但所有標簽必須合理的嵌套,絕對不允許交叉嵌套,例如: <a>welcometo<b></a></b>格式良好的XML文檔必須有且僅有一個根標簽,其它標簽都是這個根標簽的子孫標簽。Tip:元素(2)對于XML標簽中出現(xiàn)的所有空格和換行,XML解析程序都會當作標簽內(nèi)容進行處理。例如:下面兩段內(nèi)容的意義是不一樣的。第一段:<網(wǎng)址></網(wǎng)址>
第二段:
<網(wǎng)址>
</網(wǎng)址>由于在XML中,空格和換行都作為原始內(nèi)容被處理,所以,在編寫XML文件時,使用換行和縮進等方式來讓原文件中的內(nèi)容清晰可讀的“良好”書寫習慣可能要被迫改變。Tip:元素(3)——命名標準一個XML元素可以包含字母、數(shù)字以及其它一些可見字符,但必須遵守下面的一些標準:區(qū)分大小寫,例如,<P>和<p>是兩個不同的標記。不能以數(shù)字或"_"(下劃線)開頭。不能以xml(或XML、或Xml等)開頭。不能包含空格。名稱中間不能包含冒號〔:〕。Tip:屬性一個標簽可以有多個屬性,每個屬性都有它自己的名稱和取值,例如: <inputname=“text”>屬性值一定要用雙引號〔"〕或單引號〔'〕引起來定義屬性必須遵循與標簽相同的命名標準多學一招:在XML技術(shù)中,標簽屬性所代表的信息,也可以被改成用子元素的形式來描述,例如: <input> <name>text</name> </input>Tip:注釋Xml文件中的注釋采用:“<!--注釋-->”格式。注意:XML聲明之前不能有注釋注釋不能嵌套,例如: <!--大段注釋 …… <!--局部注釋--> …… -->
Tip:CDATA區(qū)在編寫XML文件時,有些內(nèi)容可能不想讓解析引擎解析執(zhí)行,而是當作原始內(nèi)容處理。遇到此種情況,可以把這些內(nèi)容放在CDATA區(qū)里,對于CDATA區(qū)域內(nèi)的內(nèi)容,XML解析程序不會處理,而是直接原封不動的輸出。語法:<![CDATA[內(nèi)容]]> <![CDATA[ <itcast> <br/> </itcast> ]]>Tip:轉(zhuǎn)義字符對于一些單個字符,假設(shè)想顯示其原始樣式,也可以使用轉(zhuǎn)義的形式予以處理。Tip:處理指令處理指令,簡稱PI〔processinginstruction〕。處理指令用來指揮解析引擎如何解析XML文檔內(nèi)容。例如,在XML文檔中可以使用xml-stylesheet指令,通知XML解析引擎,應(yīng)用css文件顯示xml文檔內(nèi)容。 <?xml-stylesheettype="text/css"href="1.css"?>處理指令必須以“<?”作為開頭,以“?>”作為結(jié)尾,XML聲明語句就是最常見的一種處理指令。XML約束方立勛Tip:XML約束概述什么是XML約束在XML技術(shù)里,可以編寫一個文檔來約束一個XML文檔的書寫標準,這稱之為XML約束。為什么需要XML約束常用的約束技術(shù)XMLDTDXMLSchemaTip:DTD約束快束入門DTD(DocumentTypeDefinition),全稱為文檔類型定義。文件清單:book.xml<?xmlversion="1.0"?><!DOCTYPE書架SYSTEM"book.dtd"><書架> <書> <書名>Java就業(yè)培訓教程</書名> <作者>張孝祥</作者> <售價>39.00元</售價> </書> <書> <書名>JavaScript網(wǎng)頁開發(fā)</書名> <作者>張孝祥</作者> <售價>28.00元</售價> </書></書架>文件清單:book.dtd
<!ELEMENT書架(書+)> <!ELEMENT書(書名,作者,售價)> <!ELEMENT書名(#PCDATA)> <!ELEMENT作者(#PCDATA)> <!ELEMENT售價(#PCDATA)>DTD文件應(yīng)使用UTF-8或UnicodeTip:編程校驗XML文檔正確性IE5以上瀏覽器內(nèi)置了XML解析工具:Microsort.XMLDOM,開發(fā)人員可以編寫javascript代碼,利用這個解析工具裝載xml文件,并對xml文件進行dtd驗證。創(chuàng)立xml文檔解析器對象varxmldoc=newActiveXObject("Microsoft.XMLDOM");開啟xml校驗xmldoc.validateOnParse="true";裝載xml文檔xmldoc.load("book.xml");獲取錯誤信息;Tip:編寫DTD約束的兩種方式DTD約束即可以作為一個單獨的文件編寫,也可以在XML文件內(nèi)編寫。Tip:在xml文件內(nèi)編寫DTD<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><!DOCTYPE書架[ <!ELEMENT書架(書+)> <!ELEMENT書(書名,作者,售價)> <!ELEMENT書名(#PCDATA)> <!ELEMENT作者(#PCDATA)> <!ELEMENT售價(#PCDATA)>]><書架> <書> <書名>Java就業(yè)培訓教程</書名> <作者>張孝祥</作者> <售價>39.00元</售價> </書> ...</書架>Tip:引用DTD約束XML文件使用DOCTYPE聲明語句來指明它所遵循的DTD文件,DOCTYPE聲明語句有兩種形式:當引用的文件在本地時,采用如下方式: <!DOCTYPE文檔根結(jié)點SYSTEM"DTD文件的URL"> 例如:<!DOCTYPE書架SYSTEM“book.dtd”>。在xml文件中手寫一下。當引用的文件是一個公共的文件時,采用如下方式: <!DOCTYPE文檔根結(jié)點PUBLIC"DTD名稱""DTD文件的URL"> 例如:<!DOCTYPEweb-appPUBLIC "-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN" "://java.sun/dtd/web-app_2_3.dtd">Tip:DTD約束語法細節(jié)元素定義屬性定義實體定義Tip:DTD的語法細節(jié):元素定義1
在DTD文檔中使用ELEMENT聲明一個XML元素,語法格式如下所示: <!ELEMENT元素名稱元素類型>元素類型可以是元素內(nèi)容、或類型如為元素內(nèi)容:那么需要使用()括起來,如<!ELEMENT書架(書名,作者,售價)><!ELEMENT書名(#PCDATA)>如為元素類型,那么直接書寫,DTD標準定義了如下幾種類型:EMPTY:用于定義空元素,例如<br/><hr/>ANY:表示元素內(nèi)容為任意類型。Tip:DTD的語法細節(jié):元素定義2元素內(nèi)容中可以使用如下方式,描述內(nèi)容的組成關(guān)系用逗號分隔,表示內(nèi)容的出現(xiàn)順序必須與聲明時一致。<!ELEMENTMYFILE(TITLE,AUTHOR,EMAIL)>用|分隔,表示任選其一,即多個只能出現(xiàn)一個 <!ELEMENTMYFILE(TITLE|AUTHOR|EMAIL)>元素內(nèi)容使用空白符分隔,表示出現(xiàn)順序沒有要求:<!ELEMENTMYFILE(TITLEAUTHOREMAIL)>*在元素內(nèi)容中也可以使用+、*、?等符號表示元素出現(xiàn)的次數(shù): +:一次或?qū)掖?書+) ?:0次或一次(書?) *:0次或?qū)掖?書*)也可使用圓括號()批量設(shè)置,例 <!ELEMENTMYFILE((TITLE*,AUTHOR?,EMAIL)*|COMMENT)>Tip:屬性定義
xml文檔中的標簽屬性需通過ATTLIST為其設(shè)置屬性語法格式: <!ATTLIST元素名 屬性名1屬性值類型設(shè)置說明 屬性名2屬性值類型設(shè)置說明 …… >屬性聲明舉例:<!ATTLIST商品 類別CDATA#REQUIRED 顏色CDATA#IMPLIED>對應(yīng)XML文件: <商品類別="服裝"顏色="黃色">…</商品> <商品類別="服裝">…</商品>Tip:屬性定義舉例:
<!ATTLIST頁面作者 姓名CDATA#IMPLIED 年齡CDATA#IMPLIED 聯(lián)系信息CDATA#REQUIRED 網(wǎng)站職務(wù)CDATA#FIXED"頁面作者" 個人愛好CDATA"上網(wǎng)"
>設(shè)置說明:#REQUIRED:必須設(shè)置該屬性#IMPLIED:可以設(shè)置也可以不設(shè)置#FIXED:說明該屬性的取值固定為一個值,在XML文件中不能為該屬性設(shè)置其它值。但需要為該屬性提供這個值直接使用默認值:在XML中可以設(shè)置該值也可以不設(shè)置該屬性值。假設(shè)沒設(shè)置那么使用默認值。Tip:常用屬性值類型CDATA:表示屬性值為普通文本字符串。ENUMERATEDIDENTITY(實體)Tip:屬性值類型
ENUMERATED<?xmlversion="1.0"encoding="GB2312"standalone="yes"?><!DOCTYPE購物籃[ <!ELEMENT肉EMPTY> <!ATTLIST肉品種(雞肉|牛肉|豬肉|魚肉)"雞肉">]><購物籃> <肉品種="魚肉"/> <肉品種="牛肉"/> <肉/></購物籃>屬性的類型可以是一組取值的列表,在XML文件中設(shè)置的屬性值只能是這個列表中的某個值(枚舉)Tip:屬性值類型
ID<?xmlversion="1.0"encoding="GB2312"?><!DOCTYPE聯(lián)系人列表[ <!ELEMENT聯(lián)系人列表ANY> <!ELEMENT聯(lián)系人(姓名,EMAIL)> <!ELEMENT姓名(#PCDATA)> <!ELEMENTEMAIL(#PCDATA)> <!ATTLIST聯(lián)系人編號ID#REQUIRED>]><聯(lián)系人列表> <聯(lián)系人編號="1"> <姓名>張三</姓名> <EMAIL>zhang@</EMAIL></聯(lián)系人> <聯(lián)系人編號="1"> <姓名>李四</姓名> <EMAIL>li@</EMAIL> </聯(lián)系人></聯(lián)系人列表>表示屬性的設(shè)置值為一個唯一值。ID屬性的值只能由字母,下劃線開始,不能出現(xiàn)空白字符Tip:實體定義
實體用于為一段內(nèi)容創(chuàng)立一個別名,以后在XML文檔中就可以使用別名引用這段內(nèi)容了。在DTD定義中,一條<!ENTITY…>語句用于定義一個實體。實體可分為兩種類型:引用實體和參數(shù)實體。Tip:實體定義引用實體
引用實體主要在XML文檔中被應(yīng)用語法格式:<!ENTITY實體名稱“實體內(nèi)容”>:直接轉(zhuǎn)變成實體內(nèi)容引用方式:&實體名稱;舉例: <!ENTITYcopyright“Iamaprogrammer"> …… ©right;Tip:實體定義參數(shù)實體
參數(shù)實體被DTD文件自身使用語法格式:<!ENTITY%實體名稱"實體內(nèi)容">引用方式:%實體名稱;舉例1: <!ENTITY%TAG_NAMES"姓名|EMAIL||地址">
<!ELEMENT個人信息(%TAG_NAMES;|生日)> <!ELEMENT客戶信息(%TAG_NAMES;|公司名)>舉例2:<!ENTITY%common.attributes "idID#IMPLIED accountCDATA#REQUIRED">...<!ATTLISTpurchaseOrder%common.attributes;><!ATTLISTitem%common.attributes;>XML編程(CRUD)方立勛Tip:XML解析技術(shù)概述XML解析方式分為兩種:dom和saxdom:(DocumentObjectModel,即文檔對象模型)是W3C組織推薦的處理XML的一種方式。sax:(SimpleAPIforXML)不是官方標準,但它是XML社區(qū)事實上的標準,幾乎所有的XML解析器都支持它。XML解析器Crimson、Xerces、Aelfred2XML解析開發(fā)包Jaxp、Jdom、dom4jTip:JAXPJAXP開發(fā)包是J2SE的一局部,它由javax.xml、org.w3c.dom、包及其子包組成在包中,定義了幾個工廠類,程序員調(diào)用這些工廠類,可以得到對xml文檔進行解析的DOM或SAX的解析器對象。Tip:使用JAXP進行DOM解析包中的DocumentBuilderFactory用于創(chuàng)立DOM模式的解析器對象,DocumentBuilderFactory是一個抽象工廠類,它不能直接實例化,但該類提供了一個newInstance方法,這個方法會根據(jù)本地平臺默認安裝的解析器,自動創(chuàng)立一個工廠的對象并返回。Tip:獲得JAXP中的DOM解析器調(diào)用DocumentBuilderFactory.newInstance()方法得到創(chuàng)立DOM解析器的工廠。調(diào)用工廠對象的newDocumentBuilder方法得到DOM解析器對象。調(diào)用DOM解析器對象的parse()方法解析XML文檔,得到代表整個文檔的Document對象,進行可以利用DOM特性對整個XML文檔進行操作了。Tip:DOM編程DOM模型(documentobjectmodel)DOM解析器在解析XML文檔時,會把文檔中的所有元素,按照其出現(xiàn)的層次關(guān)系,解析成一個個Node對象(節(jié)點)。在dom中,節(jié)點之間關(guān)系如下:位于一個節(jié)點之上的節(jié)點是該節(jié)點的父節(jié)點(parent)一個節(jié)點之下的節(jié)點是該節(jié)點的子節(jié)點〔children〕同一層次,具有相同父節(jié)點的節(jié)點是兄弟節(jié)點〔sibling〕一個節(jié)點的下一個層次的節(jié)點集合是節(jié)點后代(descendant)父、祖父節(jié)點及所有位于節(jié)點上面的,都是節(jié)點的祖先(ancestor)節(jié)點類型〔下頁ppt〕Tip:Node對象Node對象提供了一系列常量來代表結(jié)點的類型,當開發(fā)人員獲得某個Node類型后,就可以把Node節(jié)點轉(zhuǎn)換成相應(yīng)的節(jié)點對象(Node的子類對象),以便于調(diào)用其特有的方法。〔查看API文檔〕Node對象提供了相應(yīng)的方法去獲得它的父結(jié)點或子結(jié)點。編程人員通過這些方法就可以讀取整個XML文檔的內(nèi)容、或添加、修改、刪除XML文檔的內(nèi)容了。Tip:DOM方式解析XML文件DOM解析編程遍歷所有節(jié)點查找某一個節(jié)點刪除結(jié)點更新結(jié)點添加節(jié)點DOM編程練習Tip:更新XML文檔包中的Transformer類用于把代表XML文件的Document對象轉(zhuǎn)換為某種格式后進行輸出,例如把xml文件應(yīng)用樣式表后轉(zhuǎn)成一個html文檔。利用這個對象,當然也可以把Document對象又重新寫入到一個XML文件中。Transformer類通過transform方法完成轉(zhuǎn)換操作,該方法接收一個源和一個目的地。我們可以通過:類來關(guān)聯(lián)要轉(zhuǎn)換的document對象,用對象來表示數(shù)據(jù)的目的地。Transformer對象通過TransformerFactory獲得。Tip:SAX解析在使用DOM解析XML文檔時,需要讀取整個XML文檔,在內(nèi)存中構(gòu)架代表整個DOM樹的Doucment對象,從而再對XML文檔進行操作。此種情況下,如果XML文檔特別大,就會消耗計算機的大量內(nèi)存,并且容易導致內(nèi)存溢出。SAX解析允許在讀取文檔的時候,即對文檔進行處理,而不必等到整個文檔裝載完才會文檔進行操作。Tip:SAX解析SAX采用事件處理的方式解析XML文件,利用SAX解析XML文檔,涉及兩個局部:解析器和事件處理器:解析器可以使用JAXP的API創(chuàng)立,創(chuàng)立出SAX解析器后,就可以指定解析器去解析某個XML文檔。解析器采用SAX方式在解析某個XML文檔時,它只要解析到XML文檔的一個組成局部,都會去調(diào)用事件處理器的一個方法,解析器在調(diào)用事件處理器的方法時,會把當前解析到的xml文件內(nèi)容作為方法的參數(shù)傳遞給事件處理器。事件處理器由程序員編寫,程序員通過事件處理器中方法的參數(shù),就可以很輕松地得到sax解析器解析到的數(shù)據(jù),從而可以決定如何對數(shù)據(jù)進行處理。Tip:SAX解析閱讀ContentHandlerAPI文檔,常用方法:startElement、endElement、charactersTip:SAX方式解析XML文檔使用SAXParserFactory創(chuàng)立SAX解析工廠SAXParserFactoryspf=SAXParserFactory.newInstance();通過SAX解析工廠得到解析器對象 SAXParsersp=spf.newSAXParser();通過解析器對象得到一個XML的讀取器XMLReaderxmlReader=sp.getXMLReader();設(shè)置讀取器的事件處理器 xmlReader.setContentHandler(newBookParserHandler());解析xml文件 xmlReader.parse("book.xml");Tip:SAX方式解析XML文檔SAX解析編程Tip:DOM4J解析XML文檔Dom4j是一個簡單、靈活的開放源代碼的庫。Dom4j是由早期開發(fā)JDOM的人別離出來而后獨立開發(fā)的。與JDOM不同的是,dom4j使用接口和抽象基類,雖然Dom4j的API相對要復雜一些,但它提供了比JDOM更好的靈活性。Dom4j是一個非常優(yōu)秀的JavaXMLAPI,具有性能優(yōu)異、功能強大和極易使用的特點。現(xiàn)在很多軟件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。使用Dom4j開發(fā),需下載dom4j相應(yīng)的jar文件。Tip:Document對象DOM4j中,獲得Document對象的方式有三種: 1.讀取XML文件,獲得document對象
SAXReaderreader=newSAXReader();
Document
document=reader.read(newFile("input.xml")); 2.解析XML形式的文本,得到document對象.
Stringtext="<members></members>";
Documentdocument=DocumentHelper.parseText(text); 3.主動創(chuàng)立document對象.
Documentdocument=DocumentHelper.createDocument();
//創(chuàng)立根節(jié)點Elementroot=document.addElement("members");Tip:節(jié)點對象1.獲取文檔的根節(jié)點.Elementroot=document.getRootElement();2.取得某個節(jié)點的子節(jié)點. Elementelement=node.element(“書名");3.取得節(jié)點的文字Stringtext=node.getText();Tip:節(jié)點對象4.取得某節(jié)點下所有名為“member”的子節(jié)點,并進行遍歷.
Listnodes=rootElm.elements("member");
for(Iteratorit=nodes.iterator();it.hasNext();){
Elementelm=(Element)it.next();
//dosomething
}5.對某節(jié)點下的所有子節(jié)點進行遍歷.
for(Iteratorit=root.elementIterator();it.hasNext();){
Elementelement=(Element)it.next();
//dosomething
}6.在某節(jié)點下添加子節(jié)點.
ElementageElm=newMemberElm.addElement("age");Tip:節(jié)點對象7.設(shè)置節(jié)點文字.
element.setText("29");8.刪除某節(jié)點.
//childElm是待刪除的節(jié)點,parentElm是其父節(jié)點parentElm.remove(childElm);
9.添加一個CDATA節(jié)點.
ElementcontentElm=infoElm.addElement("content");
contentElm.addCDATA(diary.getContent());Tip:節(jié)點對象屬性1.取得某節(jié)點下的某屬性
Elementroot=document.getRootElement();
//屬性名nameAttributeattribute=root.attribute("size");
2.取得屬性的文字
Stringtext=attribute.getText();3.刪除某屬性
Attributeattribute=root.attribute("size");
root.remove(attribute);Tip:節(jié)點對象屬性3.遍歷某節(jié)點的所有屬性
Elementroot=document.getRootElement();
for(Iteratorit=root.attributeIterator();it.hasNext();){
Attributeattribute=(Attribute)it.next();
Stringtext=attribute.getText();
System.out.println(text);
}4.設(shè)置某節(jié)點的屬性和文字.
newMemberElm.addAttribute("name","sitinspring");5.設(shè)置屬性的文字
Attributeattribute=root.attribute("name");
attribute.setText("sitinspring");Tip:將文檔寫入XML文件.1.文檔中全為英文,不設(shè)置編碼,直接寫入的形式.
XMLWriterwriter=newXMLWriter(newFileWriter("output.xml"));
writer.write(document);
writer.close();2.文檔中含有中文,設(shè)置編碼格式寫入的形式.
OutputFormatformat=OutputFormat.createPrettyPrint();
//指定XML編碼
format.setEncoding("GBK");
XMLWriterwriter=newXMLWriter(newFileWriter("output.xml"),format);
writer.write(document);
writer.close();Tip:Dom4j在指定位置插入節(jié)點1.得到插入位置的節(jié)點列表〔list〕2.調(diào)用list.add(index,elemnent),由index決定element的插入位置。Element元素可以通過DocumentHelper對象得到。例如代碼:Elementaaa=DocumentHelper.createElement("aaa");aaa.setText("aaa");Listlist=root.element("書").elements();list.add(1,aaa);//更新documentTip:字符串與XML的轉(zhuǎn)換1.將字符串轉(zhuǎn)化為XML
Stringtext="<members><member>sitinspring</member></members>";
Documentdocument=DocumentHelper.parseText(text);2.將文檔或節(jié)點的XML轉(zhuǎn)化為字符串.
SAXReaderreader=newSAXReader();
Document
document=reader.read(newFile("input.xml"));
Elementroot=document.getRootElement();
StringdocXmlText=document.asXML();
StringrootXmlText=root.asXML();
ElementmemberElm=root.element("member");
StringmemberXmlText=memberElm.asXML();XMLSchemaXMLSchema也是一種用于定義和描述XML文檔結(jié)構(gòu)與內(nèi)容的模式語言,其出現(xiàn)是為了克服DTD的局限性XMLSchemaVSDTD:XMLSchema符合XML語法結(jié)構(gòu)。DOM、SAX等XMLAPI很容易解析出XMLSchema文檔中的內(nèi)容。XMLSchema對名稱空間支持得非常好。XMLSchema比XMLDTD支持更多的數(shù)據(jù)類型,并支持用戶自定義新的數(shù)據(jù)類型。XMLSchema定義約束的能力非常強大,可以對XML實例文檔作出細致的語義限制。XMLSchema不能像DTD一樣定義實體,比DTD更復雜,但XmlSchema現(xiàn)在已是w3c組織的標準,它正逐步取代DTD。Schema約束快速入門XMLSchema文件自身就是一個XML文件,但它的擴展名通常為.xsd。一個XMLSchema文檔通常稱之為模式文檔(約束文檔),遵循這個文檔書寫的xml文件稱之為實例文檔。和XML文件一樣,一個XMLSchema文檔也必須有一個根結(jié)點,但這個根結(jié)點的名稱為Schema。編寫了一個XMLSchema約束文檔后,通常需要把這個文件中聲明的元素綁定到一個URI地址上,在XMLSchema技術(shù)中有一個專業(yè)術(shù)語來描述這個過程,即把XMLSchema文檔聲明的元素綁定到一個名稱空間上,以后XML文件就可以通過這個URI〔即名稱空間〕來告訴解析引擎,xml文檔中編寫的元素來自哪里,被誰約束。Schema入門案例<?xmlversion="1.0"encoding="UTF-8"?><xs:schemaxmlns:xs=":///2001/XMLSchema" targetNamespace="://itcast" elementFormDefault="qualified"> <xs:elementname='書架'> <xs:complexType> <xs:sequencemaxOccurs='unbounded'> <xs:elementname='書'> <xs:complexType> <xs:sequence> <xs:elementname='書名'type='xs:string'/> <xs:elementname='作者'type='xs:string'/> <xs:elementname='售價'type='xs:string'/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element></xs:schema>book.xsd文件Schema入門案例<?xmlversion="1.0"encoding="UTF-8"?><itcast:書架xmlns:itcast="://" xmlns:xsi=":///2001/XMLSchema-instance" xsi:schemaLocation=“://book.xsd"> <itcast:書> <itcast:書名>JavaScript網(wǎng)頁開發(fā)</itcast:書名> <itcast:作者>張孝祥</itcast:作者> <itcast:售價>28.00元</itcast:售價> </itcast:書></itcast:書架>名稱空間的概念
在XMLSchema中,每個約束模式文檔都可以被賦以一個唯一的名稱空間,名稱空間用一個唯一的URI〔UniformResourceIdentifier,統(tǒng)一資源標識符〕表示。在Xml文件中書寫標簽時,可以通過名稱空間聲明〔xmlns〕,來聲明當前編寫的標簽來自哪個Schema約束文檔。如: <itcast:書架xmlns:itcast=“://”> <itcast:書>……</itcast:書> </itcast:書架> 此處使用itcast來指向聲明的名稱,以便于后面對名稱空間的引用。注意:名稱空間
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年編程教學項目申請報告
- 2025年初中人教版初中生物八年級上冊 5.4.2 細菌 說課稿
- 基于南通鄉(xiāng)土文化的小學英語批注式閱讀教學模式創(chuàng)新研究
- 15 故鄉(xiāng)2024-2025學年九年級語文上冊同步教學設(shè)計(河北專版)
- 《書憤》教學設(shè)計 2023-2024學年統(tǒng)編版高中語文選擇性必修中冊
- 2024年度開封水務(wù)投資集團有限公司公開招聘9人筆試參考題庫附帶答案詳解
- 14 回憶我的母親2024-2025學年新教材七年級上冊語文新教學設(shè)計(統(tǒng)編版2024)
- 《第17課 自動跟蹤-紅外傳感器和碰撞傳感器的綜合應(yīng)用》教學設(shè)計教學反思-2023-2024學年初中信息技術(shù)清華大學版2012九年級下冊
- 傳染病報告流程時限
- 傳染病報告卡填寫的方法與步驟
- 農(nóng)田雜草的分類
- Python網(wǎng)絡(luò)爬蟲基礎(chǔ)教程PPT完整全套教學課件
- 婦產(chǎn)科護理學課程標準
- 人文地理學期末考試試題
- 中華人民共和國國歌教案【四篇】
- 北師大版數(shù)學二年級上冊口算題練習(300道)可直接打印
- 西方音樂史完整演示文稿
- 關(guān)于優(yōu)秀干部特點和優(yōu)點【六篇】
- 臨時用藥申請表
- 有關(guān)變電站消防安全管理問題及對策
- 軍隊文職招聘(司機崗)近年考試真題題庫(含真題、典型題匯總)
評論
0/150
提交評論