獲取 xml 文件的驗證模式。正則表達式
DTD(Document Type Definition),即文檔類型定義,爲 XML 文件的驗證機制,屬於 XML 文件中組成的一部分編程
- DTD 是一種保證 XML 文檔格式正確的有效驗證方式,它定義了相關 XML 文檔的元素、屬性、排列方式、元素的內容類型以及元素的層次結構
- 其實 DTD 就至關於 XML 中的 「詞彙」和「語法」,咱們能夠經過比較 XML 文件和 DTD 文件 來看文檔是否符合規範,元素和標籤使用是否正確
要在 Spring 中使用 DTD,須要在 Spring XML 文件頭部聲明:this
DTD 在必定的階段推進了 XML 的發展,可是它自己存在着一些缺陷:spa
- 它沒有使用 XML 格式,而是本身定義了一套格式,相對解析器的重用性較差;並且 DTD 的構建和訪問沒有標準的編程接口,於是解析器很難簡單的解析 DTD 文檔
- DTD 對元素的類型限制較少;同時其餘的約束力也叫弱
- DTD 擴展能力較差
- 基於正則表達式的 DTD 文檔的描述能力有限
針對 DTD 的缺陷,W3C 在 2001 年推出 XSD。XSD(XML Schemas Definition)即 XML Schema 語言code
- XML Schema 自己就是一個 XML文檔,使用的是 XML 語法,所以能夠很方便的解析 XSD 文檔。
相對於 DTD,XSD 具備以下優點:xml
- XML Schema基於XML,沒有專門的語法
- XML Schema能夠象其餘XML文件同樣解析和處理
- XML Schema比DTD提供了更豐富的數據類型.
- XML Schema提供可擴充的數據模型。
- XML Schema支持綜合命名空間
- XML Schema支持屬性組。
getValidationModeForResource() 分析
- 若是指定了 XML 文件的的驗證模式(調用
XmlBeanDefinitionReader.setValidating(boolean validating)
)則直接返回指定的驗證模式
- 不然調用
detectValidationMode()
獲取相應的驗證模式
detectValidationMode
核心在於 this.validationModeDetector.detectValidationMode(inputStream)、
- validationModeDetector 定義爲
XmlValidationModeDetector
因此驗證模式的獲取委託給 XmlValidationModeDetector
的 detectValidationMode()
方法
- 經過讀取 XML 文件的內容,判斷內容中是否包含有 DOCTYPE ,若是是 則爲 DTD,不然爲 XSD
- 固然只會讀取到 第一個 「<」 處,由於 驗證模式必定會在第一個 「<」 以前。若是當中出現了 CharConversionException 異常,則爲 XSD模式