版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第4章XML與W3CXMLSchema模式4.1XMLSchema簡介4.2XMLSchema的常用內(nèi)置簡單類型4.3XMLSchema聲明簡單類型4.4XMLSchema聲明復(fù)雜類型4.5XMLSchema的名稱空間4.6綜合實例4.7本章小結(jié)習(xí)題44.1XMLSchema簡介
通過第2章和第3章的學(xué)習(xí),我們知道XML文檔有結(jié)構(gòu)良好和有效性兩種約束。格式良好適合于所有的XML文檔,即滿足XML標(biāo)準(zhǔn)中對于格式的規(guī)定,而當(dāng)XML文檔滿足一定的語義約束時則稱該XML文檔為有效的XML文檔。目前常用的XML檢查有效性的語言有DTD、XDR和XSD。
1.DTD
第3章描述的DTD文檔類型定義使用不同于XML的獨立語法來規(guī)定了XML文檔中各種元素的內(nèi)容模式,該語言直接沿襲了定義SGML語言的方法。
2.XDR
XDR的全稱是XML-DataReducedLanguage,是早先由XML-Data草案派生出來的一個定義XML語言的分支。微軟最先提出了XML-Data,并且經(jīng)過修訂后在微軟的應(yīng)用軟件中大量使用。
3.XSD
最為正式的XMLSchema語言是由W3C指定的XMLSchema規(guī)范,簡稱XSD(XMLSchemaDefinition)。XSD也提供了數(shù)據(jù)類型的支持和結(jié)構(gòu)定義的方法。
2001年5月2日,XMLSchema規(guī)范成為了W3C的正式推薦標(biāo)準(zhǔn)。這就意味著經(jīng)過三年多的發(fā)展,XML的Schema標(biāo)準(zhǔn)終于成為業(yè)界統(tǒng)一認(rèn)可的規(guī)范。伴隨著XML、XMLSchema和Namespace相繼成為W3C的正式標(biāo)準(zhǔn),意味著XML語法規(guī)范已經(jīng)奠定了扎實的基礎(chǔ),XML的廣泛發(fā)展和應(yīng)用也即將成為現(xiàn)實。4.1.1Schema的本質(zhì)
Schema文檔實際上是一個以?.xsd為后綴的文本文件。例4-1的案例給出了一個簡單的Schema文檔,通過這個案例可以對Schema有一個直觀的認(rèn)識。【例4-1】
案例說明:一個簡單的Schema實例。
程序名稱:ch4-1.xsd
01<?xmlversion="1.0"?>
02<xsd:schemaxmlns:xsd="/2001/XMLSchema">
03<xsd:elementname="PersonName"type="xsd:string"/>
04</xsd:schema>案例分析:程序ch4-1.xsd給出了一個由四行代碼寫出的Schema文檔。對上述代碼的分析如下:
第01行代碼<?xmlversion=“1.0”?>在第2章的2.2節(jié)中已經(jīng)學(xué)習(xí)過,該代碼為XML文檔聲明,說明該文檔為一個XML文檔。
第02行及第04行代碼是一個元素的定義<xsd:schema>和</xsd:schema>,該元素是整個文檔的唯一根元素,在第2章的2.3.4節(jié)中有根元素的詳細(xì)說明。第02行根元素后面緊跟的代碼xmlns:xsd=“http:///2001/XMLSchema”則定義了一個xsd的命名空間,在第2章的2.4.1節(jié)和2.4.2節(jié)中有關(guān)于命名空間的詳細(xì)說明。
第03行代碼是<xsd:schema>的子元素<xsd:element>,該元素有兩個屬性:type和name。在第2章的2.3.5節(jié)和2.3.6節(jié)中給出了屬性和元素嵌套的詳細(xì)說明。
通過上述對例4-1的Schema文檔代碼的分析,可以看出該文檔的結(jié)構(gòu)性很強,而且完全符合XML文檔的語法規(guī)范,這就是Schema的本質(zhì)——XML文檔。4.1.2使用Schema的原因
已經(jīng)有了DTD文檔來驗證XML文檔的有效性,為什么還要使用Schema來驗證呢?下面通過實例來說明其原因。例4-2和例4-3給出的兩個案例分別使用Schema和DTD驗證了同一個XML文檔,這個XML文檔的根元素為PersonName,三個子元素為FullName、FirstName和LastName?!纠?-2】
案例說明:使用Schema驗證XML文檔的實例。
程序名稱:ch4-2.xsd
01<?xmlversion="1.0">
02<xsd:schemaxmlns:xsd="/2001/XMLSchema">
03<xsd:elementname="PersonName">
04<xsd:complexType>
05<xsd:sequence>06<xsd:elementname="FullName"type="xsd:string"/>
07<xsd:elementname="FirstName"type="xsd:string"/>
08<xsd:elementname="LastName"type="xsd:string"/>
09</xsd:sequence>
10</xsd:complexType>
11</xsd:element>
12</xsd:schema>程序名稱:ch4-2.xml
01<?xmlversion="1.0"encoding="utf-8"?>
02<PersonNamexmlns:xsi="/2001
/XMLSchema-instance"xsi:noNamespaceSchema
Location="ch4-2.xsd">
03<FullName>樓樺</FullName>
04<FirstName>樓</FirstName>
05<LastName>樺</LastName>
06</PersonName>【例4-3】
案例說明:使用DTD驗證XML文檔的實例。
程序名稱:ch4-3.dtd
01<?xmlversion="1.0"encoding="utf-8"?>
02<!ELEMENTFullName(#PCDATA)>
03<!ELEMENTFirstName(#PCDATA)>
04<!ELEMENTLastName(#PCDATA)>
05<!ELEMENTPersonName(FullName,FirstName,LastName)>程序名稱:ch4-3.xml
01<?xmlversion="1.0"encoding="utf-8"?>
02<!DOCTYPEPersonNameSYSTEM"ch4-3.dtd">
03<PersonName>
04<FullName>樓樺</FullName>
05<FirstName>樓</FirstName>
06<LastName>樺</LastName>
07</PersonName>案例分析:直接理解例4-2中的Schema是有困難的,但通過直觀的代碼觀察和分析即可得出Schema和DTD兩種不同定義方法的區(qū)別。
(1)由于Schema是一個規(guī)范的XML文檔,因此它繼承了XML文檔結(jié)構(gòu)性強的特點,各個元素的嵌套關(guān)系非常直觀。而DTD文檔的結(jié)構(gòu)是平面化的,可以想象,使用DTD在定義嵌套關(guān)系復(fù)雜的XML文檔時,很難把握各個元素之間的層次和嵌套關(guān)系。
(2)例4-2中的Schema代碼第05行至第07行在定義三個子元素時使用了type屬性即type=“xsd:string”,其中string類型直觀地表達(dá)了子元素是字符串類型的信息。例4-3中的DTD只能表示子元素含有文本,不能再嵌套子元素,對于文本的具體類型,DTD無法更加精確地進(jìn)行定義。
(3)?Schema本質(zhì)就是XML文檔,而DTD不是XML文檔。用XML文檔來定義XML文檔對于理解Schema文檔和構(gòu)造解析器方面具有非常大的優(yōu)勢。上述兩個案例提供的信息表達(dá)的Schema相對于DTD的優(yōu)勢遠(yuǎn)不止這些,目前在許多XML的應(yīng)用和開發(fā)領(lǐng)域,DTD逐漸呈現(xiàn)頹勢(DTD目前仍然可以勝任定義某些簡單XML文檔的工作)。Schema作為主流的XML模式,已經(jīng)是一種必然的趨勢。4.1.3使用Schema驗證XML文檔
下面再來分析一下例4-2中案例包含的兩個文檔,觀察一下Schema(程序ch4-2.xsd)是如何驗證XML文檔(程序ch4-2.xml)的。
1.Schema文檔
(1)第01行代碼<?xmlversion=“1.0”>是XML文檔聲明,Schema在本質(zhì)上是一個XML文檔。
(2)第02行代碼<xsd:schemaxmlns:xsd=“http://www.w3.org/2001/XMLSchema">和第12行代碼</xsd:schema>定義了整個Schema文檔的根元素,所有元素和屬性的聲明都必須包含在根元素<xsd:schema>中。命名空間“http://www./2001/XMLSchema”由W3C提供,該案例中將這個命名空間綁定在前綴“xsd”上,在該文檔中出現(xiàn)的以“xsd”為前綴的元素,都是“/2001/XMLSchema”的一員。本章中的所有案例都將W3C提供的命名空間“/2001/XMLSchema”綁定在前綴“xsd”上。
(3)第03行代碼<xsd:elementname=“PersonName”>和第11行代碼</xsd:element>定義了XML文檔的根元素。元素<xsd:element>也是命名空間“xsd”中的一員,用于聲明一個元素。name屬性表示被聲明的元素的名稱是“PersonName”。
(4)第04行、05行、09行和第10行代碼均為定義根元素<xsd:elementname=“PersonName”>類型的語句,這些代碼將在4.4節(jié)中給出詳細(xì)的說明。
(5)第06行至第08行代碼定義了XML文檔根元素的三個子元素FullName、FirstName和LastName,并且在type屬性中定義了子元素的數(shù)據(jù)類型為string字符串類型。
2.XML文檔
(1)該文檔與第2章講述的XML文檔的不同之處在于根元素的第02行代碼:
<PersonNamexmlns:xsi=“/2001
/XMLSchema-instance”
xsi:noNamespaceSchemaLocation=“ch4-2.xsd”>
(2)“/2001/XMLSchema-instance”是W3C提供的另一個特殊的命名空間,該命名空間中的元素和屬性主要用來將XML文檔與Schema文檔關(guān)聯(lián)起來。
(3)“xsi:noNamespaceSchemaLocation”用來定義Schema文件的路徑。由于Schema驗證Schema文檔(ch4-2.xsd)和XML文檔(ch4-2.xml)在同一個文件夾下,這里使用的是相對路徑“ch4-2.xsd”,本章涉及的所有案例中的Schema文檔和XML文檔都位于同一個目錄下,全部使用相對路徑。如果驗證文檔使用絕對路徑,則可以寫為“file:///e:/xsd/4-2.xsd”,表示驗證文檔位于E盤的xsd文件夾下,文件名為“4-2.xsd”。
4.2XMLSchema的常用內(nèi)置簡單類型
W3CSchema中定義了44種內(nèi)置數(shù)據(jù)類型,本節(jié)將對其中經(jīng)常使用的七種類型進(jìn)行說明。這七種類型分別是:字符串型、小數(shù)型、整數(shù)型、布爾型、日期型、時間型和日期時間型。本節(jié)中說明未涉及的類型可以查閱W3C的Schema語法說明。4.2.1字符串(string)型
字符串類型是幾乎每個高級編程語言中變量和數(shù)據(jù)庫字段的類型定義中的一種,這個數(shù)據(jù)類型用于定義XML文檔中元素或者屬性的數(shù)據(jù)內(nèi)容為一個字符串,使用“xsd:string”進(jìn)行定義。例4-4給出的案例說明了如何定義一個字符串類型的圖書名稱元素?!纠?-4】
案例說明:使用Schema定義字符串類型的元素。
程序名稱:ch4-4.xsd
01<?xmlversion="1.0"encoding="utf-8"?>
02<xsd:schemaxmlns:xsd="/2001/XMLSchema">
03<xsd:elementname="BookName"type="xsd:string"/>
04</xsd:schema>程序名稱:ch4-4.xml
01<?xmlversion="1.0"encoding="utf-8"?>
02<BookNamexmlns:xsi="/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ch4-4.xsd">
03XML學(xué)習(xí)指南
04</BookName>實際上,所有的元素和屬性的數(shù)據(jù)類型都可以是字符串類型,就像DTD中定義的數(shù)據(jù)類型PCDATA一樣,是數(shù)據(jù)類型中最松散的約束,其唯一要求是不能含有特殊字符(如“&”、“>”等2.5節(jié)中預(yù)定義實體表示的字符)。4.2.2小數(shù)(decimal)型
十進(jìn)制的小數(shù)使用也非常普遍,使用“xsd:decimal”進(jìn)行定義。小數(shù)類型的數(shù)據(jù)內(nèi)容可以加上正負(fù)號,分別表示正數(shù)和負(fù)數(shù)。例4-5給出的案例說明了如何定義一個小數(shù)類型的圖書價格元素?!纠?-5】
案例說明:使用Schema定義小數(shù)類型的元素。
程序名稱:ch4-5.xsd
01<?xmlversion="1.0"encoding="utf-8"?>
02<xsd:schemaxmlns:xsd="/2001/XMLSchema">
03<xsd:elementname="BookPrice"type="xsd:decimal"/>
04</xsd:schema>程序名稱:ch4-5.xml
01<?xmlversion=“1.0”encoding=“utf-8”?>
02<BookPricexmlns:xsi=“/2001
/XMLSchema-instance”
xsi:noNamespaceSchemaLocation=“ch4-5.xsd”>
0346.50
04</BookPrice>
小數(shù)類型最多可以指定18位小數(shù),定義浮點類型使用“xsd:float”,定義雙精度浮點類型使用“xsd:double”。4.2.3整數(shù)(integer)型
整數(shù)類型使用“xsd:integer”進(jìn)行定義,整數(shù)類型的數(shù)據(jù)內(nèi)容也可以加上正負(fù)號,分別表示正整數(shù)和負(fù)整數(shù)。如果XML文檔中元素的數(shù)據(jù)內(nèi)容是整數(shù)類型而定義該元素的是小數(shù)類型,則有效性校驗是可以通過的;如果XML文檔中元素的數(shù)據(jù)內(nèi)容是小數(shù)類型(如12.3)而定義該元素的是整數(shù)類型,則有效性校驗無法通過。例4-6給出的案例說明了如何定義一個整數(shù)類型的圖書數(shù)量元素?!纠?-6】
案例說明:使用Schema定義整數(shù)類型的元素。
程序名稱:ch4-6.xsd
01<?xmlversion="1.0"encoding="utf-8"?>
02<xsd:schemaxmlns:xsd="/2001
/XMLSchema">
03<xsd:elementname="BookNumber"type="xsd:integer"/>
04</xsd:schema>程序名稱:ch4-6.xml
01<?xmlversion="1.0"encoding="utf-8"?>
02<BookNumberxmlns:xsi="/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ch4-6.xsd">
03400
04</BookNumber>“xsd:integer”包含了所有的整數(shù),下面是四個整數(shù)類型的子類型定義:
“xsd:positiveInteger”——正整數(shù)定義,即1、2、3、4…;
“xsd:negativeInteger”——負(fù)整數(shù)定義,即?-1、-2、-3、-4…;
“xsd:nonNegativeInteger”——非負(fù)整數(shù)定義,即0、1、2、3、4…;
“xsd:nonPositiveInteger”——非正整數(shù)定義,即0、-1、-2、-3、-4…。
例4-6中的圖書數(shù)量元素如果表示庫存數(shù)量,則使用“xsd:nonNegativeInteger”來進(jìn)行類型定義約束性會更強,因為庫存的圖書數(shù)量不可能出現(xiàn)負(fù)整數(shù)。4.2.4布爾(boolean)型
布爾類型使用“xsd:boolean”進(jìn)行定義,該類型定義的元素一般只包含兩種狀態(tài),如是或否、真或假、正或負(fù)等。使用該數(shù)據(jù)類型定義的元素數(shù)據(jù)內(nèi)容可以有兩組:“true”或“false”、“0”或“1”?!?”通常用來表示“false”;“1”通常用來表示“true”。例4-7給出的案例說明了如何定義一個布爾類型的圖書是否售完的元素?!纠?-7】
案例說明:使用Schema定義布爾類型的元素。
程序名稱:ch4-7.xsd
01<?xmlversion=“1.0”encoding=“utf-8”?>
02<xsd:schemaxmlns:xsd=“/2001
/XMLSchema">
03<xsd:elementname="Sellout"type="xsd:boolean"/>
04</xsd:schema>程序名稱:ch4-7.xml
01<?xmlversion=“1.0”encoding=“utf-8”?>
02<Selloutxmlns:xsi=“/2001
/XMLSchema-instance”
xsi:noNamespaceSchemaLocation=“ch4-7.xsd”>
03false
04</Sellout>
案例分析:因為Schema的本質(zhì)是XML文檔,所以字母大小寫含義是不同的。程序ch4-7.xml中元素<Sellout>取值如果是“False”或者“FALSE”,是無法通過有效性校驗的。4.2.5日期(date)型
日期類型使用“xsd:date”進(jìn)行定義,日期類型的格式為YYYY-MM-DD,其中YYYY表示年份,MM表示月份,DD表示日。該類型定義的元素數(shù)據(jù)內(nèi)容如果表達(dá)“2008年2月5日”應(yīng)該為“2008-02-05”,如果數(shù)據(jù)內(nèi)容為“2008-2-5”將無法通過有效性驗證。例4-8給出的案例說明了如何定義一個日期類型的圖書出版日期元素?!纠?-8】
案例說明:使用Schema定義日期類型的元素。
程序名稱:ch4-8.xsd
01<?xmlversion="1.0"encoding="utf-8"?>
02<xsd:schemaxmlns:xsd="/2001/XMLSchema">
03<xsd:elementname="PublishDate"type="xsd:date"/>
04</xsd:schema>程序名稱:ch4-8.xml
01<?xmlversion="1.0"encoding="utf-8"?>
02<PublishDatexmlns:xsi="/2001
/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ch4-8.xsd">
032008-06-18
04</PublishDate>4.2.6時間(time)型
時間類型使用“xsd:time”進(jìn)行定義,時間類型的格式為hh:mm:ss,其中hh表示小時,mm表示分鐘,ss表示秒。該類型定義的元素數(shù)據(jù)內(nèi)容如果表達(dá)“20點6分8秒”應(yīng)該為“20:06:08”,如果數(shù)據(jù)內(nèi)容為“20:6:8”將無法通過有效性驗證。例4-9給出的案例說明了如何定義一個時間類型的檢查時間元素?!纠?-9】
案例說明:使用Schema定義時間類型的元素。
程序名稱:ch4-9.xsd
01<?xmlversion="1.0"encoding="utf-8"?>
02<xsd:schemaxmlns:xsd="/2001
/XMLSchema">
03<xsd:elementname="CheckTime"type="xsd:time"/>
04</xsd:schema>程序名稱:ch4-9.xml
01<?xmlversion="1.0"encoding="utf-8"?>
02<CheckTimexmlns:xsi="/2001
/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ch4-9.xsd">
0314:48:25
04</CheckTime>4.2.7日期時間(dateTime)型
日期時間類型使用“xsd:dateTime”進(jìn)行定義,日期時間類型的格式為YYYY-MM-DDThh:mm:ss,其中大寫的“T”是日期與時間的分隔符,不能缺少。例4-10給出的案例說明了如何定義一個日期時間類型的入庫時間元素?!纠?-10】
案例說明:使用Schema定義時間日期類型的元素。
程序名稱:ch4-10.xsd
01<?xmlversion="1.0"encoding="utf-8"?>
02<xsd:schemaxmlns:xsd="/2001/XMLSchema">
03<xsd:elementname="InstoreDateTime"type="xsd:dateTime"/>
04</xsd:schema>程序名稱:ch4-10.xml
01<?xmlversion="1.0"encoding="utf-8"?>
02<InstoreDateTimexmlns:xsi="/2001
/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ch4-10.xsd">
032008-07-12T15:30:00
04</InstoreDateTime>
4.3XMLSchema聲明簡單類型
XMLSchema的定義過程就是聲明XML文檔元素的過程。XML文檔元素分為兩大類:簡單元素和復(fù)雜元素。簡單元素是指只含有文本內(nèi)容,不含有子元素和屬性的元素。復(fù)雜元素是指除簡單元素以外的元素。對應(yīng)這兩種XML文檔的元素,Schema中也相應(yīng)地存在兩種類型,即簡單類型和復(fù)雜類型。其中簡單類型又分為內(nèi)置簡單類型(本章4.2節(jié)中案例使用的所有類型)和自定義簡單類型。自定義數(shù)據(jù)類型都是直接或者間接由內(nèi)置簡單類型衍生出來的,自定義數(shù)據(jù)類型可以理解為施加了特定約束的內(nèi)置簡單類型。對內(nèi)置簡單類型施加約束,這個要求是從具體的應(yīng)用需求中產(chǎn)生的。例如定義一個人的年齡的元素,元素的數(shù)據(jù)類型僅有正整數(shù)定義(xsd:positiveInteger)是不夠的,因為人的年齡不可能達(dá)到200歲,所以要施加正整數(shù)的上限200,這個上限(200)就是施加在正整數(shù)類型(xsd:positiveInteger)上的約束。相似的例子還有百分制的考試成績(非負(fù)整數(shù)類型,約束為大于等于0小于等于100)、中國人名(字符串類型,約束為最少兩個漢字最多四個漢字)、貨幣表示(小數(shù)類型,約束為保留兩位小數(shù))等。4.3.1限制字符串的長度
限制字符串的長度采用<xsd:minLengthvalue="***"/>指定最小長度,采用<xsd:maxLengthvalue="***"/>指定最大長度。例4-11的案例給出了一個定義圖書作者名稱元素類型的Schema文檔。
【例4-11】
案例說明:使用Schema定義一個具有字符串長度的限制的簡單類型,由字符串類型派生。
程序名稱:ch4-11.xsd
01<?xmlversion=“1.0”?>
02<xsd:schemaxmlns:xsd=“/2001
/XMLSchema”>
03<xsd:elementname=“PersonName”>
04<xsd:simpleType>05<xsd:restrictionbase="xsd:string">
06<xsd:minLengthvalue="2"/>
07<xsd:maxLengthvalue="4"/>
08</xsd:restriction>
09</xsd:simpleType>
10</xsd:element>
11</xsd:schema>程序名稱:ch4-11.xml
01<?xmlversion="1.0"encoding="utf-8"?>
02<PersonNamexmlns:xsi="/2001
/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ch4-11.xsd">
03樓樺
04</PersonName>
案例分析:Schema文檔ch4-11.xsd中的第04行代碼塊<xsd:simpleType>表示聲明一個自定義簡單類型。該聲明簡單類型定義緊跟在第03行代碼<xsd:elementname="PersonName">之后,表明聲明的是XML文檔中元素<PersonName>的數(shù)據(jù)內(nèi)容類型。
Schema文檔ch4-11.xsd中的第05行代碼<xsd:restrictionbase=“xsd:string”>說明新類型是一個基于xsd:string類型的約束。
Schema文檔ch4-11.xsd中的第06行代碼<xsd:minLengthvalue=“2”/>中使用關(guān)鍵字“minLength”來限定字符串的最小長度,最小長度的值由“value”屬性的值“2”指定。
Schema文檔ch4-11.xsd中的第07行代碼<xsd:maxLengthvalue=“4”/>中使用關(guān)鍵字“maxLength”來限定字符串的最大長度,最大長度的值由“value”屬性的值“4”指定。
在字符串中,無論是中文字符還是英文字符,都被當(dāng)做一個字符來看待。例4-11中的程序ch4-11.xsd第04行至第09行代碼塊定義了第03行聲明的元素<xsd:elementname="PersonName">,這個代碼塊將自定義類型聲明與元素聲明進(jìn)行了嵌套,Schema文檔復(fù)雜時會導(dǎo)致代碼的可讀性和重用性下降。所以一般都采用元素聲明和類型聲明隔離的方法進(jìn)行代碼的編寫。程序ch4-11.xsd可以改寫為如程序ch4-11-1.xsd所示的代碼:程序名稱:ch4-11-1.xsd
01<?xmlversion="1.0"encoding="utf-8"?>
02<xsd:schemaxmlns:xsd="/2001/XMLSchema">
03<xsd:elementname="PersonName"type="AuthorNameType"/>04<xsd:simpleTypename="AuthorNameType">
05<xsd:restrictionbase="xsd:string">
06<xsd:minLengthvalue="2"/>
07<xsd:maxLengthvalue="4"/>
08</xsd:restriction>
09</xsd:simpleType>
10</xsd:schema>案例分析:程序ch4-11-1.xsd的第04行至第09行代碼塊依然聲明了一個簡單類型,但是和源Schema文檔ch4-11.xsd不同的是,首先將聲明簡單類型的代碼塊從<xsd:element>中取出,該代碼塊成為<xsd:schema>元素的子元素。
程序ch4-11-1.xsd的第04行元素<xsd:simpleType>在聲明簡單類型的語句中加入了屬性“name”的值來定義聲明簡單類型的名稱,上面程序的第04行至第09行代碼塊聲明的簡單類型名稱為“AuthorNameType”。程序ch4-11-1.xsd的第03行代碼中將聲明元素<xsd:elementname=“PersonName”>的數(shù)據(jù)內(nèi)容類型用屬性“type”的值“AuthorNameType”定義為第04行~09行代碼塊聲明的簡單類型。
本章所提供的案例中Schema文檔類型聲明的代碼編寫方式一律采用程序ch4-11-1.xsd的類型聲明方式書寫。4.3.2限制數(shù)值的取值范圍
限制數(shù)值的取值范圍采用<xsd:minInclusivevalue="***"/>指定臨界最小值,采用<xsd:max-Inclusivevalue="***"/>指定臨界最大值,使用這兩個關(guān)鍵字聲明的取值范圍包括邊界值。例4-12的案例給出了一個定義圖書價格元素類型的Schema文檔。
【例4-12】
案例說明:使用Schema定義一個具有取值范圍限制的簡單類型,由小數(shù)類型派生。
程序名稱:ch4-12.xsd
01<?xmlversion=“1.0”encoding=“utf-8”?>
02<xsd:schemaxmlns:xsd=“/2001/XMLSchema”>
03<xsd:elementname=“BookPrice”type=“PriceType”/>
04<xsd:simpleTypename="PriceType">05<xsd:restrictionbase="xsd:decimal">
06<xsd:minExclusivevalue="0"/>
07<xsd:maxInclusivevalue="200"/>
08</xsd:restriction>
09</xsd:simpleType>
10</xsd:schema>程序名稱:ch4-12.xml
01<?xmlversion="1.0"encoding="utf-8"?>
02<BookPricexmlns:xsi="/2001
/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ch4-12.xsd">
0325.60
04</BookPrice>案例分析:由于圖書價格不可能是0,因此程序ch4-12.xsd中的第06行代碼使用<xsd:minExclusivevalue="0"/>指定臨界最小值“0”,表示元素的值必須大于最小值“0”。上面案例中圖書價格元素的取值范圍為“0<圖書價格元素值≤200”。同樣可以使用<xsd:maxExclusivevalue="***"/>指定臨界最大值,表示元素的值必須小于最大值。4.3.3限制小數(shù)位數(shù)
限制小數(shù)位數(shù)使用<xsd:fractionDigitsvalue=“***”/>來定義數(shù)字的小數(shù)部分位數(shù)。例4-13的案例給出了一個定義圖書價格元素類型的Schema文檔。
【例4-13】
案例說明:使用Schema定義一個具有取值范圍限制和小數(shù)位數(shù)限制的簡單類型,由小數(shù)類型派生。程序名稱:ch4-13.xsd
01<?xmlversion="1.0"encoding="utf-8"?>
02<xsd:schemaxmlns:xsd="/2001/XMLSchema">
03<xsd:elementname="BookPrice"type="PriceType"/>
04<xsd:simpleTypename="PriceType">
05<xsd:restrictionbase="xsd:decimal">
06<xsd:fractionDigitsvalue="2"/>07<xsd:minExclusivevalue="0"/>
08<xsd:maxInclusivevalue="200"/>
09</xsd:restriction>
10</xsd:simpleType>
11</xsd:schema>程序名稱:ch4-13.xml
01<?xmlversion=“1.0”encoding=“utf-8”?>
02<BookPricexmlns:xsi=“/2001
/XMLSchema-instance”
xsi:noNamespaceSchemaLocation=“ch4-13.xsd”>
0325.60
04</BookPrice>
案例分析:第06行代碼指定了小數(shù)位數(shù)為“2”,如果要對數(shù)字的總位數(shù)進(jìn)行約束則使用<xsd:totalDigitsvalue="***"/>進(jìn)行限定,同樣value屬性的值指定了數(shù)字總位數(shù)。4.3.4枚舉類型
如果遇到表達(dá)星期幾的元素時只能從七個取值(星期一、星期二、星期三、星期四、星期五、星期六和星期天)中取出一個值;如果表達(dá)奧運會比賽獎牌的元素只能從三個取值(金牌、銀牌、銅牌)中取出一個值;如果表達(dá)小寫字母元素只能從26個取值(a、b、c、…、z)中取出一個值。
上面所描述的元素類型就可以定義為枚舉類型,枚舉類型是一種取值集合。定義枚舉類型使用<xsd:enumerationvalue="***"/>,value屬性的取值則定義了取值集合中的一個值。例4-14的案例給出了一個定義性別元素類型的Schema文檔。
【例4-14】
案例說明:使用Schema定義一個枚舉簡單類型,由字符串類型派生。
程序名稱:ch4-14.xsd
01<?xmlversion=“1.0”encoding=“utf-8”?>
02<xsd:schemaxmlns:xsd=“/2001
/XMLSchema”>
03<xsd:elementname=“Gender”type
=“GenderEnumType”/>
04<xsd:simpleTypename=“GenderEnumType”>
05<xsd:restrictionbase="xsd:string">06<xsd:enumerationvalue="男"/>
07<xsd:enumerationvalue="女"/>
08</xsd:restriction>
09</xsd:simpleType>
10</xsd:schema>程序名稱:ch4-14.xml
01<?xmlversion=“1.0”encoding=“utf-8”?>
02<Genderxmlns:xsi=“/2001
/XMLSchema-instance”
xsi:noNamespaceSchemaLocation=“ch4-14.xsd”>
03男
04</Gender>
案例分析:在程序ch4-13.xsd中第03行代碼定義的“Gender”元素在XML實例文檔中只能取“男”(第06行定義)或“女”(第07行定義)中的一個值。4.3.5模式匹配
本章前面小節(jié)講述了如何給數(shù)據(jù)類型施加長度約束、取值范圍約束和取值集合約束。如果要對電話號碼這樣的數(shù)據(jù)類型施加約束,應(yīng)該如何進(jìn)行?電話號碼的典型取值例子有、、等,約束的表達(dá)應(yīng)該是“三位或者四位數(shù)字”加上“-”再加上“七位或者八位數(shù)字”。對于這種數(shù)據(jù)類型的格式約束使用<xsd:patternvalue=“\正則表達(dá)式”/>來進(jìn)行指定,其中value屬性的值為一個正則表達(dá)式。電話號碼的約束表達(dá)為“三位或者四位數(shù)字”加上“-”再加上“七位或者八位數(shù)字”,正則表達(dá)式為“\d{3,4}-\d{7,8}”。
再比如,對于一個正規(guī)出版的書籍,一般都有一個ISBN(InternationalStandardBookNumber,國際標(biāo)準(zhǔn)書號)。例如ISBN7-5606-0534-6/TP0264表達(dá)的就是一個中國境內(nèi)出版的圖書標(biāo)準(zhǔn)編號,其中:7代表該書是中國出版的;
5606是由國家ISBN中心分配給該書的;
0535是出版社自己給出的;
6是電子計算機的校驗碼;
TP指該書是“自動化技術(shù)、計算機技術(shù)”方面的;
0624是書的特征數(shù)據(jù)。
例4-15的案例給出了一個定義圖書ISBN類型的Schema文檔。
【例4-15】
案例說明:使用Schema定義一個具有強制格式及位數(shù)的簡單類型,由字符串類型派生。
程序名稱:ch4-15.xsd
01<?xmlversion=“1.0”encoding=“utf-8”?>
02<xsd:schemaxmlns:xsd=“/2001/XMLSchema”>
03<xsd:elementname=“ISBN”type=“ISBNType”/>
04<xsd:simpleTypename=“ISBNType”>
05<xsd:restrictionbase="xsd:string">06<xsd:patternvalue="\d{1}-\d{4}-\d{4}-\d{1}/TP\d{4}"/>
07<xsd:lengthvalue="20"/>
08</xsd:restriction>
09</xsd:simpleType>
10</xsd:schema>程序名稱:ch4-15.xml
01<?xmlversion=“1.0”encoding=“utf-8”?>
02<ISBNxmlns:xsi=“/2001
/XMLSchema-instance”
xsi:noNamespaceSchemaLocation=“ch4-15.xsd”>
037-5606-0492-7/TP0229
04</ISBN>
案例分析:注意程序ch4-15.xsd中第06行代碼表達(dá)的value屬性值中的正則表達(dá)式“\d{1}-\d{4}-\d{4}-\d{1}/TP\d{4}”,其中的“/TP”和“-”都代表占位符。4.3.6元素的固定值和默認(rèn)值
本章上述各節(jié)講述的元素的一般定義形式為<xsd:elementname=“elementName”type=“elementType”/>,其中name和type屬性是必需的屬性,另外還有兩個可選屬性——default(默認(rèn)值)和fixed(固定值)。
元素的默認(rèn)值是在Schema文檔元素的聲明中預(yù)先設(shè)定的元素值。當(dāng)XML文檔元素的內(nèi)容為空時,處理器會將Schema文檔元素的預(yù)設(shè)值當(dāng)作該元素的值。元素的固定值也是在Schema文檔元素的聲明中預(yù)先設(shè)定的元素值。固定值限定XML文檔元素出現(xiàn)時,其值必須和Schema文檔元素的預(yù)設(shè)固定值相等??梢岳斫鉃橹挥幸粋€枚舉值的枚舉類型,例如水在正常氣壓下的沸點溫度只能是100℃,其Schema元素聲明為:
<xsd:elementname=“Boil_temperature”type=“xsd:integer”fixed=“100”/>
例4-16的案例給出了一個帶有默認(rèn)值屬性的圖書數(shù)量元素的Schema文檔?!纠?-16】
案例說明:使用Schema定義具有默認(rèn)值的元素。
程序名稱:ch4-16.xsd
01<?xmlversion="1.0"encoding="utf-8"?>
02<xsd:schemaxmlns:xsd="/2001/XMLSchema">
03<xsd:elementname="BookNumber"type="xsd:integer"default="0"/>
04</xsd:schema>程序名稱:ch4-16.xml
01<?xmlversion="1.0"encoding="utf-8"?>
02<BookNumberxmlns:xsi="/2001
/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ch4-16.xsd">
03</BookNumber>案例分析:處理器在處理程序ch4-16.xml的文檔時,元素<BookNumber>沒有數(shù)據(jù)內(nèi)容,處理器會將該元素的內(nèi)容視為Schema元素聲明中屬性default的值——整數(shù)“0”。本案例中,處理器只是將XML文檔中元素的值視為默認(rèn)值,并未改變XML文檔的內(nèi)容,這點要特別注意。將程序ch4-16.xsd中的第03行代碼指定默認(rèn)值的代碼“default="0"”刪除后,程序ch4-16.xml將無法通過有效性驗證。因為未設(shè)定默認(rèn)值,處理器在遇到元素數(shù)據(jù)內(nèi)容為空時,將使用空字符串進(jìn)行有效性校驗。而第03行代碼定義該元素的數(shù)據(jù)類型為“integer”,所以無法通過校驗。
4.4XMLSchema聲明復(fù)雜類型
復(fù)雜元素的類型聲明由于子元素和屬性的存在,相應(yīng)的約束也比簡單元素的類型聲明要復(fù)雜。本節(jié)將介紹聲明復(fù)雜類型所采用的主要技術(shù)。4.4.1定義元素順序
一個元素通常會包含很多子元素,例如關(guān)于圖書信息的描述可能包含作者姓名、作者年齡、作者性別這三個子元素。多個子元素的存在首先要解決的就是順序問題,Schema提供了all(任意順序)、sequence(特定順序)和choice(選擇順序)三種指示符來解決這個問題。
例4-17給出了一個使用all指示符的聲明圖書信息的復(fù)雜類型聲明,其中聲明了父元素圖書信息“BookInfo”,以及子元素圖書作者性別“AuthorGender”、圖書作者年齡“AuthorAge”和圖書作者姓名“AuthorName”?!纠?-17】
案例說明:使用順序指示符all定義的復(fù)雜類型。
程序名稱:ch4-17.xsd
01<?xmlversion="1.0"encoding="utf-8"?>
02<xsd:schemaxmlns:xsd="/2001/XMLSchema">
03<xsd:elementname="BookInfo">
04<xsd:complexType>
05<xsd:all>06<xsd:elementname="AuthorGender"type="xsd:string"/>
07<xsd:elementname="AuthorAge"type
="xsd:positiveInteger"/>
08<xsd:elementname="AuthorName"type
="xsd:string"/>
09</xsd:all>
10</xsd:complexType>
11</xsd:element>
12</xsd:schema>程序名稱:ch4-17.xml
01<?xmlversion="1.0"encoding="utf-8"?>
02<BookInfoxmlns:xsi="/2001
/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ch4-17.xsd">
03<AuthorName>樓樺</AuthorName>
04<AuthorAge>32</AuthorAge>
05<AuthorGender>男</AuthorGender>
06</BookInfo>案例分析:程序ch4-17.xsd的第04行代碼<xsd:complexType>和第10行代碼</xsd:complexType>用來聲明復(fù)雜類型,而4.2節(jié)中聲明簡單類型使用的是<xsd:sampleType>。
程序ch4-17.xsd的第05行代碼<xsd:all>和第09行代碼</xsd:all>使用“all”指示符進(jìn)行了子元素的順序定義,該指示符中定義的子元素在XML文檔中必須出現(xiàn),但順序可以任意。程序ch4-17.xsd的第06行、第07行和第08行代碼分別定義了<BookInfo>的三個子元素<AuthorGender>、<AuthorAge>和<AuthorName>。程序ch4-17.xml中元素的順序為<AuthorName>、<AuthorAge>、<AuthorGender>。該XML文檔可以通過有效性驗證,因為Schema中的子元素順序指示符為all,即任意順序。
例4-18給出了一個使用sequence指示符的聲明圖書信息的復(fù)雜類型聲明?!纠?-18】
案例說明:使用順序指示符sequence定義的復(fù)雜類型。
程序名稱:ch4-18.xsd
01<?xmlversion="1.0"encoding="utf-8"?>
02<xsd:schemaxmlns:xsd="/2001/XMLSchema">
03<xsd:elementname="BookInfo">
04<xsd:complexType>
05<xsd:sequence>06<xsd:elementname="AuthorGender"
type="xsd:string"/>
07<xsd:elementname="AuthorAge"
type="xsd:positiveInteger"/>
08<xsd:elementname="AuthorName"
type="xsd:string"/>
09</xsd:sequence>
10</xsd:complexType>
11</xsd:element>
12</xsd:schema>程序名稱:ch4-18.xml
01<?xmlversion="1.0"encoding="utf-8"?>
02<BookInfoxmlns:xsi="/2001
/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ch4-18.xsd">
03<AuthorGender>男</AuthorGender>
04<AuthorAge>32</AuthorAge>
05<AuthorName>樓樺</AuthorName>
06</BookInfo>案例分析:程序ch4-18.xml中<BookInfo>的三個子元素必須出現(xiàn),且順序必須和程序ch4-18.xsd中定義的子元素順序一致,因為Schema中的子元素順序指示符為sequence,即特定順序。Schema文檔定義的子元素沒有出現(xiàn)在XML文檔中或者XML文檔中子元素的順序和Schema文檔定義的不同,XML文檔都不能通過有效性校驗。
例4-19給出了一個使用choice指示符的聲明圖書信息的復(fù)雜類型聲明?!纠?-19】
案例說明:使用順序指示符choice定義的復(fù)雜類型。
程序名稱:ch4-19.xsd
01<?xmlversion="1.0"encoding="utf-8"?>
02<xsd:schemaxmlns:xsd="/2001/XMLSchema">
03<xsd:elementname="BookInfo">
04<xsd:complexType>
05<xsd:choice>06<xsd:elementname="AuthorGender"
type="xsd:string"/>
07<xsd:elementname="AuthorAge"
type="xsd:positiveInteger"/>
08<xsd:elementname="AuthorName"
type="xsd:string"/>
09</xsd:choice>
10</xsd:complexType>
11</xsd:element>
12</xsd:schema>程序名稱:ch4-19.xml
01<?xmlversion="1.0"encoding="utf-8"?>
02<BookInfoxmlns:xsi="/2001
/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ch4-19.xsd">
03<AuthorAge>32</AuthorAge>
04</BookInfo>案例分析:程序ch4-19.xsd中定義的元素<BookInfo>的三個子元素在XML文檔中必須出現(xiàn)且只能出現(xiàn)一個子元素,因為Schema中的子元素順序指示符為choice,即選擇順序。XML文檔中子元素的數(shù)量多于一個,XML文檔將不能通過有效性校驗??梢园裞hoice指示符理解為針對Schema定義子元素的一個枚舉。4.4.2定義元素出現(xiàn)次數(shù)
解決了復(fù)雜類型聲明中的子元素順序問題,緊接著就要解決子元素在父元素中以一定的順序出現(xiàn)以后,在父元素中要出現(xiàn)多少的問題。Schema提供了子元素屬性minOccurs的值來指定子元素在父元素中的最少出現(xiàn)數(shù)量,屬性maxOccurs的值來指定子元素在父元素中的最多出現(xiàn)數(shù)量。當(dāng)沒有顯式設(shè)定時,這兩個屬性的默認(rèn)值都為1;當(dāng)屬性maxOccurs的值為“unbounded”時,表示不限制子元素在父元素中的出現(xiàn)次數(shù)。例4-20給出了一個使用定義子元素出現(xiàn)次數(shù)來聲明復(fù)雜類型的案例。使用該案例的Schema定義的XML文檔中,子元素圖書作者姓名“AuthorName”在父元素圖書信息“BookInfo”中只能出現(xiàn)一次,而子元素聯(lián)系方式“LinkWay”在父元素圖書信息“BookInfo”中的出現(xiàn)次數(shù)將不被限制。
【例4-20】
案例說明:使用minOccurs和maxOccurs屬性定義的復(fù)雜類型。程序名稱:ch4-20.xsd
01<?xmlversion="1.0"encoding="utf-8"?>
02<xsd:schemaxmlns:xsd="/2001/XMLSchema">
03<xsd:elementname="BookInfo">
04<xsd:complexType>
05<xsd:sequence>06<xsd:elementname="AuthorName"type="xsd:string"minOccurs="1"/>
07<xsd:elementname="LinkWay"type="xsd:string"maxOccurs="unbounded"/>
08</xsd:sequence>
09</xsd:complexType>
10</xsd:element>
11</xsd:schema>程序名稱:ch4-20.xml
01<?xmlversion="1.0"encoding="utf-8"?>
02<BookInfoxmlns:xsi="/2001
/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ch4-20.xsd">
03<AuthorName>樓樺</AuthorName>
04<LinkWay>lt;/LinkWay>
05<LinkWay>lt;/LinkWay>
06<LinkWay>LOUHUAZZU@163.com</LinkWay>
07</BookInfo>需要注意順序指示符中的任意順序all,使用該指示符其內(nèi)部聲明的元素maxOccurs屬性值不能設(shè)置為大于1的數(shù)值,因為all所限定的子元素在其父元素中最多只能出現(xiàn)一次。4.4.3屬性聲明
解決了復(fù)雜類型聲明中的子元素在父元素中出現(xiàn)的順序問題,以及子元素在父元素中出現(xiàn)多少的問題,本節(jié)將解決如何定義屬性的問題。Schema采用<xsd:attributename=“attributeName”type=“attributeType”/>來進(jìn)行屬性聲明。在有順序指示符的復(fù)雜類型聲明中,屬性聲明必須在順序指示符的結(jié)束標(biāo)記后進(jìn)行聲明。
例4-21中Schema文檔定義了元素圖書信息“BookInfo”,該元素還定義了一個屬性—國際標(biāo)準(zhǔn)書號“ISBN”?!纠?-21】
案例說明:定義元素屬性的Schema案例。
程序名稱:ch4-21.xsd
01<?xmlversion="1.0"?>
02<xsd:schemaxmlns:xsd="/2001/XMLSchema">
03<xsd:elementname="BookInfo">
04<xsd:complexType>
05<xsd:sequence>
06<xsd:elementname="BookName"type="xsd:string"/>07<xsd:elementname="AuthorName"type="xsd:string"/>
08</xsd:sequence>
09<xsd:attributename="ISBN"type="xsd:string"use="required"/>
10</xsd:complexType>
11</xsd:element>
12</xsd:schema>程序名稱:ch4-21.xml
01<?xmlversion="1.0"encoding="utf-8"?>
02<BookInfoISBN="7-5606-0492-7/TP0229"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ch4-21.xsd">
03<BookName>XML編程指南</BookName>
04<AuthorName>樓樺</AuthorName>
05</BookInfo>案例分析:注意到程序ch4-21.xsd第09行代碼中不僅定義了屬性名稱“name”和屬性類型“type”,還使用“use”選項定義了“ISBN”屬性是否必須出現(xiàn)在XML文檔中。在本案例中,“ISBN”屬性被設(shè)置為必須出現(xiàn)“required”?!皍se”選項的取值可以是“required”、“optional”或“prohibited”,這三個取值的含義如下:
①值required代表定義的屬性必須出現(xiàn)在XML文檔中;
②值optional代表定義的屬性可以出現(xiàn)也可以不出現(xiàn)在XML文檔中;
③值prohibited代表定義的屬性不能出現(xiàn)在XML文檔中。如果一個屬性聲明沒有定義use選項,那么該選項的默認(rèn)值為“optional”。屬性聲明中同樣有“default”和“fixed”兩個選項。“default”選項用來給屬性賦以默認(rèn)值,該默認(rèn)值只有當(dāng)屬性未出現(xiàn)在XML文檔中時,處理器才把屬性的值視為“default”選項設(shè)定的值。“fixed”選項用于限制屬性為固定值。4.4.4ref引用
下面的案例提供了一個表達(dá)圖書信息“BookInfo”的Schema定義(程序ch4-22.xsd),這個Schema文檔定義的元素嵌套信息如圖4-1所示。圖4-1案例4-22表達(dá)的元素嵌套層次樹
【例4-22】
案例說明:未使用ref引用元素聲明的Schema定義類型的案例。
程序名稱:ch4-22.xsd
01<?xmlversion=“1.0”?>
02<xsd:schemaxmlns:xsd=“/2001/XMLSchema”>
03<xsd:elementname=“BookInfo”>
04<xsd:complexType>
05<xsd:sequence>
06<xsd:elementname="BookName"type="xsd:string"/>07<xsd:elementname="PublisherAddress">
08<xsd:complexType>
09<xsd:sequence>
10<xsd:elementname="Province"
type="xsd:string"/>
11<xsd:elementname="City"type="xsd:string"/>
12<xsd:elementname="AddressDetail"typ
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025車輛抵債合同書
- 2025煉化工程建設(shè)總承包合同
- 2025油漆工程承包合同
- 2024-2025學(xué)年新教材高中語文 第七單元 16.2 登泰山記說課稿(1)部編版必修上冊
- 2024-2025學(xué)年高中地理 第1章 旅游和旅游資源 第2節(jié) 旅游資源的類型說課稿 中圖版選修3
- 二手房交易時合同范例
- 飲料公司組建方案
- 《 負(fù)數(shù)》(說課稿)-2023-2024學(xué)年六年級下冊數(shù)學(xué)人教版
- 石材礦山起料方案
- 鑄造企業(yè)整治方案制定
- 湖南省懷化市2024-2025學(xué)年九年級上學(xué)期期末化學(xué)試題(含答案)
- “5E”教學(xué)模式下高中數(shù)學(xué)教學(xué)實踐研究
- 急救藥品知識培訓(xùn)內(nèi)容
- 人教版初中英語單詞大全七八九年級(帶音標(biāo)) mp3聽力音頻下載
- 四川省成都市成華區(qū)2024年中考語文二模試卷附參考答案
- 2024-2030年中國豆腐市場發(fā)展趨勢展望與投資策略分析報告
- 營銷策劃 -嘉華鮮花餅「正宗」戰(zhàn)略重塑
- 胸腰椎骨折中醫(yī)護(hù)理
- 解剖臺市場發(fā)展預(yù)測和趨勢分析
- DB14∕T 92-2010 M5、M15車用甲醇汽油
- 2024年醫(yī)師定期考核臨床類人文醫(yī)學(xué)知識考試題庫及答案(共280題)
評論
0/150
提交評論