- Java核心技術·卷Ⅱ:高級特性(原書第10版)
- (美)凱S.霍斯特曼
- 694字
- 2020-10-30 18:10:49
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中的代碼。
- Boost.Asio C++ Network Programming(Second Edition)
- 計算機網絡
- Java Web應用開發(fā)技術與案例教程(第2版)
- Backbone.js Blueprints
- Integrating Facebook iOS SDK with Your Application
- Java面向對象程序設計
- 21天學通C++(第5版)
- Go語言開發(fā)實戰(zhàn)(慕課版)
- Deep Learning with R Cookbook
- 深入分析GCC
- scikit-learn Cookbook(Second Edition)
- Elasticsearch搜索引擎構建入門與實戰(zhàn)
- Zend Framework 2 Cookbook
- R語言數據分析從入門到實戰(zhàn)
- 生成藝術:Processing視覺創(chuàng)意入門