schematron驗證XML

        schema驗證XML文件大家聽的肯定很多了,但是它僅僅能驗證某些方面,比如某個元素出現的次數、某個屬性是不是必須出現的等等,但是它也有不能達到的方面。例如,我要驗證book這個元素的value屬性,只能在“java”、“C++”這兩者之內取值,而不能是另外的值,此時schema就無能爲力了。
       schematron就是爲了類似的問題而產生的。schematron繼承了schema的優點,即它也是採用了XML語法,這也是schema優於DTD的一個方面。schematron定義了一些元素:pattern、rule、assert、report以及相應屬性來限制元素及屬性的取值,使用XPath來定位元素位置。schematron的官方網站是www.schematron.com/要,官網上有個PPT對schematron有很詳細的介紹,並且介紹瞭如何使用schematron實現xml的驗證方法。
       關於驗證方法這裏就要詳細說一下了,schematron guide這個ppt上介紹了幾種方法,對於java語言來說主要有兩種。
 
       第一方法,利用apache公司的Xalan技術,它是基於XSLT的。過程是這樣:把寫好的schemetron文件(後綴爲.sch)與skeleton1-5.xsl文件作爲輸入,產生一個XSLT文件,產生的XSLT文件再與需要驗證的XML文件作爲輸入,輸出驗證結果。
       xalan.jar可以在apache官網下載到,網址是:http://www.apache.org/dist/xml/xalan-j/,下載其中的文件:xalan-j_2_7_1-bin.zip,該文件解包之後,包含了四個jar包,把這幾個包放到classpath中(即設置環境變量)。
       skeleton1-5.xsl 這個文件下載地址是:http://nexml-dev.nescent.org/nexml/xslt/
       把文件①schematron文件(.sch  skeleton1-5.xsl文件 ③要驗證的XML文件 放入一個文件夾目錄下。
       打開DOS命令窗口,把當前位置移動到上面所說的文件夾目錄下,分別輸入下面兩行命令:
 

java org.apache.xalan.xslt.Process -IN books.sch -XSL skeleton1-5.xsl -OUT generated.xslt

注:其中,books.sch是已編輯好的schematron文件 generated.xslt是要輸出的XSLT文件名,可自行定義這個文件名

java org.apache.xalan.xslt.Process -IN books.xml XSL generated.xslt -TEXT

注:books.xml即所要驗證的XML文件, generated.xslt是剛剛生成的文件

 

       驗證的結果會在命令窗口中輸出。

 

       第二種方法:利用Jing

       這種方法跟第一種方法類似,也是要在DOS命令窗口中輸入相應命令來進行驗證,本人沒有對這種方法進行深究。

 

       在DOS命令窗口進行驗證很不方便,每次去敲那幾行命令讓人很煩,所以我在apache公司網站上找到了源代碼,自己編輯了java類來實現驗證。驗證時也發現了問題,驗證到第一個問題後程序就不對剩餘的內容進行驗證,即驗證結果只顯示XML文件的第一個錯誤。這個結果顯然不是我想要,所以要繼續研究研究

 

     附:xml文件主要的驗證方法有DTD、Schema、RELAX NG(讀作relaxing)、schematron

               DTD  XML Schema RELAX NG都是基於語法的,而Schematron是基於規則的

        RELAX NG的優點就在於語法簡單,而且使用了XML語法,比起W3C XML Schema來有一定的優勢

發佈了22 篇原創文章 · 獲贊 6 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章