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来有一定的优势

你可能感兴趣的:(java,apache,xml,schema,dos,XSLT)