Spring IOC 之 獲取驗證模型

獲取 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模式
相關文章
相關標籤/搜索