官术网_书友最值得收藏!

3.3.2 XML Schema

因為XML Schema比起DTD語法要復雜許多,所以我們只涉及其基本知識。更多信息請參考http://www.w3.org/TR/xmlschema-0上的指南。

如果要在文檔中引用Schema文件,需要在根元素中添加屬性,例如:

這個聲明說明Schema文件config.xsd會被用來驗證該文檔。如果使用命名空間,語法就更加復雜了。詳情請參見XML Schema指南(前綴xsi是一個命名空間別名(namespace alias),請查看第3.5節(jié)以了解更多信息)。

Schema為每個元素都定義了類型。類型可以是簡單類型,即有格式限制的字符串,或者是復雜類型。一些簡單類型已經被內建到了XML Schema內,包括:

注意:我們用前綴xsd:來表示XSL Schema定義的命名空間。一些作者代之以xs:。

可以定義自己的簡單類型。例如,下面是一個枚舉類型:

當定義元素時,要指定它的類型:

類型約束了元素的內容。例如,下面的元素將被驗證為具有正確格式:

但是,下面的元素會被解析器拒絕:

FontType是name、size和style元素的序列。在這個類型定義中,我們使用了ref屬性來引用在Schema中位于別處的定義。也可以嵌套定義,像這樣:

請注意style元素的匿名類型定義。

xsd:sequence結構和DTD中的連接符號等價,而xsd:choice結構和|操作符等價,例如:

這和DTD中的類型email|phone類型是等價的。

如果要允許重復元素,可以使用minoccurs和maxoccurs屬性,例如,與DTD類型item*等價的形式如下:

如果要指定屬性,可以把xsd:attribute元素添加到complexType定義中去:

這與下面的DTD語句等價:

可以把Schema的元素和類型定義封裝在xsd:schema元素中:

解析帶有Schema的XML文件和解析帶有DTD的文件相似,但有3點差別:

1)必須打開對命名空間的支持,即使在XML文件里你可能不會用到它。

2)必須通過如下的“魔咒”來準備好處理Schema的工廠。

3)解析器不會丟棄元素中的空白字符,這確實很令人惱火,關于這是否是一個bug,人們看法不一。有一種變通方法,請參看程序清單3-4中的代碼。

主站蜘蛛池模板: 乐亭县| 崇礼县| 肇源县| 云林县| 罗平县| 通江县| 阿尔山市| 汨罗市| 辉县市| 浠水县| 玉林市| 蒙山县| 错那县| 博爱县| 鄂温| 精河县| 禄劝| 中方县| 万全县| 宜丰县| 保山市| 那坡县| 凌源市| 炎陵县| 深州市| 甘孜县| 克东县| 钟山县| 香格里拉县| 玛多县| 明水县| 渑池县| 威海市| 五指山市| 南华县| 苏尼特右旗| 清河县| 庆安县| 丰宁| 交城县| 新余市|