XML簡(jiǎn)明教程第6課 使用XML Schema
[ 來(lái)源:中國(guó)站長(zhǎng)學(xué)院 |作者:無(wú)從考證 ]
什么是XMLSchema?XMLSchema是一個(gè)基于XML的語(yǔ)法或schema規(guī)范,用來(lái)定義XML文檔的標(biāo)記方式。XMLSchema是一個(gè)由Microsoft建議的schema規(guī)范,它與文檔類(lèi)型定義(DTD)相比具有很大的優(yōu)勢(shì),而DTD是最初用來(lái)定義XML模型的schema規(guī)范。DTD存在很多缺點(diǎn),包括使用非XML語(yǔ)法,不支持?jǐn)?shù)據(jù)類(lèi)型定義,不具有擴(kuò)展性等。例如,DTD不允許把元素內(nèi)容定義為另外一個(gè)元素,或字符串。想了解更多有關(guān)DTD的內(nèi)容,可以參考W3CXML建議書(shū)。XMLSchema從幾個(gè)方面改善了DTD,包括使用XML語(yǔ)法,支持?jǐn)?shù)據(jù)類(lèi)型定義和名域。例如,XMLSchema允許你把一個(gè)元素說(shuō)明為一個(gè)integer,float,Boolean,URL等類(lèi)型。在InternetExplorer5中的XML解析器可以解析使用DTD或XMLSchema的XML文檔。如何建立XMLSchema?請(qǐng)?jiān)谙旅娴腦ML文檔中找一找每個(gè)節(jié)點(diǎn)的schema聲明。JaneSmith3.8你會(huì)注意到在上面文檔中默認(rèn)的名域是“x-schema:classSchema.xml”。這告訴解析器根據(jù)URL(“classSchema.xml”)上的schema(x-schema)來(lái)解析整個(gè)文檔。下面是上面那個(gè)文檔的完整的schema。注意schema的根元素中的名域聲明。個(gè)(xmlns=”urn:schemas-microsoft-com:xml-data”)表明這個(gè)XML文檔是一個(gè)XMLSchema。第二個(gè)(xmlns:dt=”urn:schemas-microsoft-com:datatypes”)允許schema處理者在ElementType和AttributeType聲明中的type屬性前加dt前綴來(lái)說(shuō)明元素的類(lèi)型和內(nèi)容的特征。用來(lái)定義元素和屬性的聲明元素如下所示:元素說(shuō)明ElementType把類(lèi)型和條件賦給一個(gè)元素,可以包含子元素AttributeType把類(lèi)型和條件賦給一個(gè)屬性attribute聲明以前定義過(guò)的屬性類(lèi)型可以出現(xiàn)在名為ElementType的元素的作用域中element聲明以前定義過(guò)的元素類(lèi)型可以出現(xiàn)在名為ElementType的元素的作用域中 Schema的內(nèi)容以最深層的元素的“AttributeType”和“ElementType”聲明開(kāi)頭。ElementType聲明后接著是它的屬性和子元素,如果一個(gè)元素有屬性或子元素,必須把這種方法包含在它的ElementType聲明中,或者是必須在它們自己的ElementType或AttributeType聲明中進(jìn)行前導(dǎo)聲明。不同于DTDs,XMLSchema允許有一個(gè)開(kāi)放的內(nèi)容模式,你可以進(jìn)行定義數(shù)據(jù)類(lèi)型、使用默認(rèn)值等等操作而不必限定內(nèi)容。在下面的schema中,元素的類(lèi)型被定義并有一個(gè)默認(rèn)值,但在元素中沒(méi)有其他節(jié)點(diǎn)被聲明。上面的schema允許你只驗(yàn)證你所關(guān)心的區(qū)域,這使你對(duì)文檔的驗(yàn)證級(jí)別有更多的控制,并允許你使用schema提供的一些特性而不必嚴(yán)格確認(rèn)。嘗試一下!試著處理一下下面的XML文檔的schema。FidelmaMcGinn425-655-33935523918shovel39.991998-10-231998-11-03如果你處理完schema,在XMLValidator中運(yùn)行.下載MSDNOnline的區(qū)域中提供了一套XMLsamplefiles,包括一個(gè)有相關(guān)schema的XML文檔。下載這些示例程序可以與XML文檔和schema一起運(yùn)行。如果你想要根據(jù)一個(gè)schema來(lái)測(cè)試XML的有效性,可以從XMLValidator處下載文檔或查看MimeTypeViewer中的XML文件。一些說(shuō)明:ElementType和AttributeType聲明必須放在attribute和element內(nèi)容聲明之前。例如,在上面的schema中,元素的ElementType聲明必須放在元素的Element
Type聲明之前!rder屬性的默認(rèn)值是建立在content屬性的值上的。當(dāng)content值為“eltOnly”時(shí),order默認(rèn)值是seq。當(dāng)content值為“mixed”時(shí),order默認(rèn)值是“many”。see如果想了解有關(guān)這些缺省值的信息,可以查看XMLSchemaReference。
來(lái)源:http://edu.chinaz.com