XML編程詳細講解_第1頁
XML編程詳細講解_第2頁
XML編程詳細講解_第3頁
XML編程詳細講解_第4頁
XML編程詳細講解_第5頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

XML概述主要內容XML及其語法XML約束之DTDXML編程(CRUD---CreateReadUpdateDelete)XML約束之Schema什么是XMLXML是指可擴展標記語言(eXtensible

MarkupLanguage),它是一種標記語言,很類似HTML。它被設計的宗旨是傳輸數(shù)據(jù),而非顯示數(shù)據(jù)。XML標簽沒有被預定義,需要用戶自行定義標簽。XML技術是W3C組織(WorldWideWebConsortium萬維網(wǎng)聯(lián)盟)發(fā)布的,目前遵循的是W3C組織于2000年發(fā)布的XML1.0規(guī)范。XML被廣泛認為是繼Java之后在Internet上最激動人心的新技術。XML技術用于解決什么問題?在現(xiàn)實生活中存在大量有關系的數(shù)據(jù),如右圖所示。問題:這樣的數(shù)據(jù)該如何表示并交給計算機處理呢?XML技術用于解決什么問題?XML語言出現(xiàn)的根本目的在于描述向上圖那種有關系的數(shù)據(jù)。XML是一種通用的數(shù)據(jù)交換格式。在XML語言中,它允許用戶自定義標簽。一個標簽用于描述一段數(shù)據(jù);一個標簽可分為開始標簽和結束標簽,在起始標簽之間,又可以使用其它標簽描述其它數(shù)據(jù),以此來實現(xiàn)數(shù)據(jù)關系的描述。XML中的數(shù)據(jù)必須通過軟件程序來解析執(zhí)行或顯示,如IE;這樣的解析程序稱之為Parser(解析器)。<?xmlversion="1.0"encoding="UTF-8"?><中國> <北京> <海淀></海淀> <豐臺></豐臺> </北京> <山東> <濟南></濟南> <青島></青島> </山東> <湖北> <武漢></武漢> <荊州></荊州> </湖北></中國>XML常見應用在Java開發(fā)中,傳統(tǒng)的配置文件是*.properties屬性文件(key=value),而XML表示的數(shù)據(jù)更為豐富。XML技術除用于描述有關系的數(shù)據(jù)外,還經(jīng)常用作軟件配置文件,以描述程序模塊之間的關系。(如后面將要學習到的Struts、Spring和Hibernate都是基于XML作為配置文件的)在一個軟件系統(tǒng)中,通過XML配置文件可以提高系統(tǒng)的靈活性。即程序的行為是通過XML文件來配置的,而不是硬編碼。XML語法XML文檔的組成一個XML文件一般由以下幾部分組成:文檔聲明元素元素的屬性注釋CDATA區(qū)特殊字符處理指令(PI:Processing

Instruction)文檔聲明在編寫XML文檔時,需要先使用文檔聲明來聲明XML文檔。且必須出現(xiàn)在文檔的第一行。最簡單的語法:<?xmlversion=“1.0”?>用encoding屬性說明文檔所使用的字符編碼,默認為UTF-8。保存在磁盤上的文件編碼要與聲明的編碼一致。

如:<?xmlversion=“1.0”encoding=“GB2312”?>用standalone屬性說明文檔是否獨立,即是否依賴其他文檔。 如:<?xmlversion=“1.0”standalone=“yes”?>元素(1)XML元素指XML文件中出現(xiàn)的標簽。一個標簽分為起始和結束標簽(不能省略)。一個標簽有如下幾種書寫形式:包含標簽主體:<mytag>somecontent</mytag>不含標簽主體:<mytag/>一個標簽中可以嵌套若干子標簽,但所有標簽必須合理的嵌套,不允許有交叉嵌套。<mytag1><mytag2></mytag1></mytag2>WRONG一個XML文檔必須有且僅有一個根標簽,其他標簽都是這個根標簽的子標簽或孫標簽。元素(2)XML中不會忽略主體內容中出現(xiàn)的空格和換行。注:由于在XML中,空格和換行都作為原始內容被處理,所以,在編寫XML文件時,使用換行和縮進等方式來讓原文件中的內容清晰可讀的“良好”書寫習慣可能要被迫改變。第一段:<中國><北京><海淀/></北京></中國>

第二段:<中國>\r\n\t <北京> <海淀/> </北京></中國>給人看元素(3)--元素命名規(guī)范元素(標簽)的名稱可以包含字母、數(shù)字、減號、下劃線和英文句點,但必須遵守下面的一些規(guī)范:嚴格區(qū)分大小寫;<P><p>只能以字母或下劃線開頭;abc_abc不能以xml(或XML、Xml等)開頭----W3C保留日后使用;名稱字符之間不能有空格或制表符;ab名稱字符之間不能使用冒號;(有特殊用途)元素的屬性一個元素可以有多個屬性,每個屬性都有它自己的名稱和取值,例如:<mytagname=“value”…/>屬性值一定要用引號(單引號或雙引號)引起來。屬性名稱的命名規(guī)范與元素的命名規(guī)范相同元素中的屬性是不允許重復的在XML技術中,標簽屬性所代表的信息也可以被改成用子元素的形式來描述,例如:<mytag> <name> <firstName/> <lastName/> </name></mytag>注釋XML中的注釋語法為:<!--這是注釋-->注意:XML聲明之前不能有注釋注釋不能嵌套,例如:<!--大段注釋… <!--有一段注釋-->…-->WRONGCDATA區(qū)CDATA是CharacterData的縮寫作用:把標簽當做普通文本內容;語法:<![CDATA[內容]]><![CDATA[

<itcast></itcast>]]>以上紅色部分被當做普通文本而不是標簽特殊字符對于一些特殊字符,若要在元素主體內容中顯示,必須進行轉義。處理指令處理指令,簡稱PI(Processing

Instruction)。作用:用來指揮軟件如何解析XML文檔。語法:必須以“<?”作為開頭,以“?>”作為結尾。常用處理指令:XML聲明:<?xmlversion=“1.0”encoding=“GB2312”?>xml-stylesheet指令:作用:指示XML文檔所使用的CSS樣式XSL。<?xml-stylesheettype=“text/css”href=“some.css”?>注:對中文命名的標簽元素不起作用XML約束之DTD為什么需要約束XML都是用戶自定義的標簽,若出現(xiàn)小小的錯誤,軟件程序將不能正確地獲取文件中的內容而報錯。(如:Tomcat)XML技術中,可以編寫一個文檔來約束一個XML的書寫規(guī)范,這個文檔稱之為約束。兩個概念:格式良好的XML:遵循XML語法的XML有效的XML:遵循約束文檔的XML總之:約束文檔定義了在XML中允許出現(xiàn)的元素名稱、屬性及元素出現(xiàn)的順序等等。常用的約束技術XMLDTDXDRSOXXMLSchemaDTD快速入門DTD(DocumentTypeDefinition):文檔類型定義。作用:約束XML的書寫規(guī)范文件清單: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)>驗證XML的有效性如何根據(jù)DTD中定義的內容來驗證XML書寫是否正確呢?答:需要軟件程序,即解析器根據(jù)能否對XML文檔進行約束模式校驗,可以將解析器分為兩類:非校驗解析器,如IE校驗解析器編程校驗XML文檔的正確性IE5以上瀏覽器內置了XML解析工具:Microsort.XMLDOM,開發(fā)人員可以編寫javascript代碼,利用這個解析工具裝載xml文件,并對xml文件進行dtd驗證。創(chuàng)建xml文檔解析器對象var

xmldoc=newActiveXObject("Microsoft.XMLDOM");開啟xml校驗xmldoc.validateOnParse="true";裝載xml文檔xmldoc.load("book.xml");獲取錯誤信息xmldoc.parseError.reason;xmldoc.parseError.line編寫DTD的方式DTD約束文檔可以在XML文檔中直接定義,也可以作為單獨的文檔進行編寫(單獨的文檔必須以UTF-8編碼進行保存)。在XML文檔中編寫DTD示例<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><!DOCTYPE書架[ <!ELEMENT書架(書+)> <!ELEMENT書(書名,作者,售價)> <!ELEMENT書名(#PCDATA)> <!ELEMENT作者(#PCDATA)> <!ELEMENT售價(#PCDATA)>]><書架> <書> <書名>Java就業(yè)培訓教程</書名> <作者>張孝祥</作者> <售價>39.00元</售價> </書> ...</書架>引入外部DTD文檔XML使用DOCTYPE聲明語句來指明它所遵循的DTD文檔,有兩種形式:當引用的DTD文檔在本地時,采用如下方式:<!DOCTYPE根元素SYSTEM“DTD文檔路徑”>如:<!DOCTYPE書架SYSTEM“book.dtd”>當引用的DTD文檔在公共網(wǎng)絡上時,采用如下方式:<!DOCTYPE根元素PUBLIC“DTD名稱”“DTD文檔的URL”>如:<!DOCTYPEweb-appPUBLIC "-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN" "/dtd/web-app_2_3.dtd">DTD語法細節(jié)DTD文檔的語法主要涉及以下內容的定義:定義元素定義屬性定義實體DTD-定義元素在DTD文檔中使用ELEMENT關鍵字來聲明一個XML元素。語法:<!ELEMENT元素名稱使用規(guī)則>使用規(guī)則:(#PCDATA):指示元素的主體內容只能是普通的文本.(ParsedCharacterData)EMPTY:用于指示元素的主體為空。比如<br/>ANY:用于指示元素的主體內容為任意類型。(子元素):指示元素中包含的子元素定義子元素及描述它們的關系:如果子元素用逗號分開,說明必須按照聲明順序去編寫XML文檔。如:<!ELEMENTFILE(TITLE,AUTHOR,EMAIL)如果子元素用“|”分開,說明任選其一。如:<!ELEMENTFILE(TITLE|AUTHOR|EMAIL)用+、*、?來表示元素出現(xiàn)的次數(shù)如果元素后面沒有+*?:表示必須且只能出現(xiàn)一次+:表示至少出現(xiàn)一次,一次或多次*:表示可有可無,零次、一次或多次?:表示可以有也可以無,有的話只能有一次。零次或一次如:<!ELEMENTMYFILE((TITLE*,AUTHOR?,EMAIL)*|COMMENT)>DTD--定義屬性1在DTD文檔中使用ATTLIST關鍵字來為一個元素聲明屬性。語法:<!ATTLIST元素名 屬性名1屬性值類型設置說明 屬性名2屬性值類型設置說明

…>例如:<!ATTLIST商品 類別

CDATA#REQUIRED

顏色

CDATA#IMPLIED>對應的XML為:<商品類別=“服裝”顏色=“黃色”/>DTD--定義屬性2屬性值類型:CDATA:表示屬性的取值為普通的文本字符串ENUMERATED(DTD沒有此關鍵字):表示枚舉,只能從枚舉列表中任選其一,如(雞肉|牛肉|豬肉|魚肉)ID:表示屬性的取值不能重復設置說明#REQUIRED:表示該屬性必須出現(xiàn)#IMPLIED:表示該屬性可有可無#FIXED:表示屬性的取值為一個固定值。語法:#FIXED"固定值"直接值:表示屬性的取值為該默認值DTD--定義屬性示例1、<!ATTLIST

頁面作者 姓名CDATA#IMPLIED

年齡CDATA#IMPLIED

聯(lián)系信息CDATA#REQUIRED

網(wǎng)站職務CDATA#FIXED"頁面作者"

個人愛好CDATA"上網(wǎng)"

>

2、<?xmlversion="1.0"encoding="GB2312"standalone="yes"?><!DOCTYPE購物籃[ <!ELEMENT肉EMPTY> <!ATTLIST肉品種(雞肉|牛肉|豬肉|魚肉)"雞肉">]><購物籃> <肉品種="魚肉"/> <肉品種="牛肉"/> <肉/></購物籃>DTD--定義屬性示例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)系人編號=“a"> <姓名>張三</姓名> <EMAIL>zhang@</EMAIL></聯(lián)系人> <聯(lián)系人編號=“b"> <姓名>李四</姓名> <EMAIL>li@</EMAIL> </聯(lián)系人></聯(lián)系人列表>DTD--定義實體定義實體就是為一段內容指定一個名稱,使用時通過這個名稱就可以引用其所代表的內容。在DTD文檔中使用ENTITY關鍵字來聲明一個實體。實體可分為:引用實體和參數(shù)實體,兩者的語法不同定義引用實體概念:在DTD中定義,在XML中使用語法:<!ENTITY實體名稱“實體內容”>引用方式(注意是在XML中使用):&實體名稱;DTD中定義: <!ENTITYcopyright“傳智播客版權所有”>XML中引用: ©right;定義參數(shù)實體(了解)概念:在DTD中定義,在DTD中使用語法:<!ENTITY%實體名稱“實體內容”>引用方式(注意是在DTD中使用):%實體名稱;DTD中定義: <!ENTITY%TAG_NAMES"姓名|EMAIL|電話|地址">DTD中引用: <!ELEMENT個人信息(%TAG_NAMES;|生日)><!ELEMENT客戶信息(%TAG_NAMES;|公司名)>XML及DTD練習XML練習題右鍵復制DTD實例XML編程(用Java編寫解析器)Java解析XML概述XML解析方式分為兩種:DOM方式和SAX方式DOM:DocumentObjectModel,文檔對象模型。這種方式是W3C推薦的處理XML的一種方式。SAX:SimpleAPIforXML。這種方式不是官方標準,屬于開源社區(qū)XML-DEV,幾乎所有的XML解析器都支持它。XML解析開發(fā)包JAXP:是SUN公司推出的解析標準實現(xiàn)。Dom4J:是開源組織推出的解析開發(fā)包。(牛,大家都在用,包括SUN公司的一些技術的實現(xiàn)都在用)JDom:是開源組織推出的解析開發(fā)包。JAXPJAXP:(JavaAPIforXMLProcessing)開發(fā)包是JavaSE的一部分,它由以下幾個包及其子包組成:org.w3c.dom:提供DOM方式解析XML的標準接口org.xml.sax:提供SAX方式解析XML的標準接口javax.xml:提供了解析XML文檔的類javax.xml.parsers包中,定義了幾個工廠類。我們可以通過調用這些工廠類,得到對XML文檔進行解析的DOM和SAX解析器對象。DocumentBuilderFactorySAXParserFactory使用JAXP進行DOM解析javax.xml.parsers

包中的DocumentBuilderFactory用于創(chuàng)建DOM模式的解析器對象,DocumentBuilderFactory是一個抽象工廠類,它不能直接實例化,但該類提供了一個newInstance方法,這個方法會根據(jù)本地平臺默認安裝的解析器,自動創(chuàng)建一個工廠的對象并返回。獲得JAXP中的DOM解析器調用DocumentBuilderFactory.newInstance()方法得到創(chuàng)建DOM解析器的工廠。調用工廠對象的newDocumentBuilder方法得到DOM解析器對象。調用DOM解析器對象的parse()方法解析XML文檔,得到代表整個文檔的Document對象,進行可以利用DOM特性對整個XML文檔進行操作了。Tip:DOM編程DOM模型(documentobjectmodel)DOM解析器在解析XML文檔時,會把文檔中的所有元素,按照其出現(xiàn)的層次關系,解析成一個個Node對象(節(jié)點)。在dom中,節(jié)點之間關系如下:位于一個節(jié)點之上的節(jié)點是該節(jié)點的父節(jié)點(parent)一個節(jié)點之下的節(jié)點是該節(jié)點的子節(jié)點(children)同一層次,具有相同父節(jié)點的節(jié)點是兄弟節(jié)點(sibling)一個節(jié)點的下一個層次的節(jié)點集合是節(jié)點后代(descendant)父、祖父節(jié)點及所有位于節(jié)點上面的,都是節(jié)點的祖先(ancestor)節(jié)點類型(下頁ppt)Node對象Node對象提供了一系列常量來代表結點的類型,當開發(fā)人員獲得某個Node類型后,就可以把Node節(jié)點轉換成相應的節(jié)點對象(Node的子類對象),以便于調用其特有的方法。(查看API文檔)Node對象提供了相應的方法去獲得它的父結點或子結點。編程人員通過這些方法就可以讀取整個XML文檔的內容、或添加、修改、刪除XML文檔的內容了。DOM方式解析XML文件DOM解析編程1、得到某個具體的節(jié)點內容2、遍歷所有元素節(jié)點3、修改某個元素節(jié)點的主體內容4、向指定元素節(jié)點中增加子元素節(jié)點5、向指定元素節(jié)點上增加同級元素節(jié)點6、刪除指定元素節(jié)點7、操作XML文件屬性DOM編程練習更新XML文檔javax.xml.transform包中的Transformer類用于把代表XML文件的Document對象轉換為某種格式后進行輸出,例如把xml文件應用樣式表后轉成一個html文檔。利用這個對象,當然也可以把Document對象又重新寫入到一個XML文件中。Transformer類通過transform方法完成轉換操作,該方法接收一個源和一個目的地。我們可以通過:javax.xml.transform.dom.DOMSource類來關聯(lián)要轉換的document對象,用javax.xml.transform.stream.StreamResult

對象來表示數(shù)據(jù)的目的地。

Transformer對象通過TransformerFactory獲得。SAX解析在使用DOM解析XML文檔時,需要讀取整個XML文檔,在內存中構架代表整個DOM樹的Doucment對象,從而再對XML文檔進行操作。此種情況下,如果XML文檔特別大,就會消耗計算機的大量內存,并且容易導致內存溢出。SAX解析允許在讀取文檔的時候,即對文檔進行處理,而不必等到整個文檔裝載完才會文檔進行操作。SAX解析SAX采用事件處理的方式解析XML文件,利用SAX解析XML文檔,涉及兩個部分:解析器和事件處理器:解析器可以使用JAXP的API創(chuàng)建,創(chuàng)建出SAX解析器后,就可以指定解析器去解析某個XML文檔。解析器采用SAX方式在解析某個XML文檔時,它只要解析到XML文檔的一個組成部分,都會去調用事件處理器的一個方法,解析器在調用事件處理器的方法時,會把當前解析到的xml文件內容作為方法的參數(shù)傳遞給事件處理器。事件處理器由程序員編寫,程序員通過事件處理器中方法的參數(shù),就可以很輕松地得到sax解析器解析到的數(shù)據(jù),從而可以決定如何對數(shù)據(jù)進行處理。SAX解析閱讀ContentHandlerAPI文檔,常用方法:startElement、endElement、charactersSAX方式解析XML文檔使用SAXParserFactory創(chuàng)建SAX解析工廠SAXParserFactory

spf=SAXParserFactory.newInstance();通過SAX解析工廠得到解析器對象 SAXParsersp=spf.newSAXParser();通過解析器對象得到一個XML的讀取器XMLReader

xmlReader=sp.getXMLReader();設置讀取器的事件處理器 xmlReader.setContentHandler(new

BookParserHandler());解析xml文件 xmlReader.parse("book.xml");SAX方式解析XML文檔SAX解析編程DOM4J解析XML文檔Dom4j是一個簡單、靈活的開放源代碼的庫。Dom4j是由早期開發(fā)JDOM的人分離出來而后獨立開發(fā)的。與JDOM不同的是,dom4j使用接口和抽象基類,雖然Dom4j的API相對要復雜一些,但它提供了比JDOM更好的靈活性。Dom4j是一個非常優(yōu)秀的JavaXMLAPI,具有性能優(yōu)異、功能強大和極易使用的特點?,F(xiàn)在很多軟件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。使用Dom4j開發(fā),需下載dom4j相應的jar文件。Document對象DOM4j中,獲得Document對象的方式有三種:

1.讀取XML文件,獲得document對象

SAXReaderreader=newSAXReader();

Document

document=reader.read(new

File("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");節(jié)點對象1.獲取文檔的根節(jié)點.Elementroot=document.getRootElement();2.取得某個節(jié)點的子節(jié)點. Elementelement=node.element(“書名");3.取得節(jié)點的文字

Stringtext=node.getText();節(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");節(jié)點對象7.設置節(jié)點文字.

element.setText("29");8.刪除某節(jié)點.

//childElm是待刪除的節(jié)點,parentElm是其父節(jié)點

parentElm.remove(childElm);

9.添加一個CDATA節(jié)點.

ElementcontentElm=infoElm.addElement("content");

contentElm.addCDATA(diary.getContent());節(jié)點對象屬性1.取得某節(jié)點下的某屬性

Elementroot=document.getRootElement();

//屬性名nameAttributeattribute=root.attribute("size");

2.取得屬性的文字

Stringtext=attribute.getText();3.刪除某屬性

Attributeattribute=root.attribute("size");

root.remove(attribute);節(jié)點對象屬性3.遍歷某節(jié)點的所有屬性

Elementroot=document.getRootElement();

for(Iteratorit=root.attributeIterator();it.hasNext();){

Attributeattribute=(Attribute)it.next();

Stringtext=attribute.getText();

System.out.println(text);

}4.設置某節(jié)點的屬性和文字.

newMemberElm.addAttribute("name","sitinspring");5.設置屬性的文字

Attributeattribute=root.attribute("name");

attribute.setText("sitinspring");將文檔寫入XML文件.1.文檔中全為英文,不設置編碼,直接寫入的形式.

XMLWriterwriter=newXMLWriter(new

FileWriter("output.xml"));

writer.write(document);

writer.close();2.文檔中含有中文,設置編碼格式寫入的形式.

OutputFormatformat=OutputFormat.createPrettyPrint();

//指定XML編碼

format.setEncoding("GBK");

XMLWriterwriter=newXMLWriter(new

FileOutputStream("output.xml"),format);

writer.write(document);

writer.close();Dom4j在指定位置插入節(jié)點1.得到插入位置的節(jié)點列表(list)2.調用list.add(index,elemnent),由index決定element的插入位置。Element元素可以通過DocumentHelper對象得到。示例代碼:Elementaaa=DocumentHelper.createElement("aaa");aaa.setText("aaa");Listlist=root.element("書").elements();list.add(1,aaa);//更新document字符串與XML的轉換1.將字符串轉化為XML

Stringtext="<members><member>sitinspring</member></members>";

Documentdocument=DocumentHelper.parseText(text);2.將文檔或節(jié)點的XML轉化為字符串.

SAXReaderreader=newSAXReader();

Document

document=reader.read(new

File("input.xml"));

Elementroot=document.getRootElement();

StringdocXmlText=document.asXML();

StringrootXmlText=root.asXML();

ElementmemberElm=root.element("member");

StringmemberXmlText=memberElm.asXML();XML約束之SchemaXMLSchemaXMLSchema也是一種用于定義和描述XML文檔結構與內容的模式語言,其出現(xiàn)是為了克服DTD的局限性XMLSchemaVSDTD:XMLSchema符合XML語法結構。DOM、SAX等XMLAPI很容易解析出XMLSchema文檔中的內容。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文檔也必須有一個根結點,但這個根結點的名稱為schema。編寫了一個XMLSchema約束文檔后,通常需要把這個文件中聲明的元素綁定到一個URI地址上,在XMLSchema技術中有一個專業(yè)術語來描述這個過程,即把XMLSchema文檔聲明的元素綁定到一個名稱空間上,以后XML文件就可以通過這個URI(即名稱空間)來告訴解析引擎,xml文檔中編寫的元素來自哪里,被誰約束。Schema入門案例<?xmlversion="1.0"encoding="UTF-8"?><xs:schemaxmlns:xs=“/2001/XMLSchema”//標準的名稱空間 targetNamespace=“http://www.”//將該schema文檔綁定到http://名稱空間 elementFormDefault="qualified"> <xs:elementname='書架'> <xs:complexType> <xs:sequence

maxOccurs='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="http://"

xmlns:xsi="/2001/XMLSchema-instance"

xsi:schemaLocation=“http://

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=“http

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論