如何在没有模式的情况下验证XML

时间:2015-04-02 11:50:57

标签: java xml xsd schema xsd-validation

这是一种在没有架构的情况下验证XML的方法吗?

我正在研究这个概念,以便在不使用XML Schema的情况下验证XML,而是使用原始Java来构建验证。我知道使用SAX或DOM解析器来解析XML文件,但我不知道是否使用这些解析器中的任何一个以类似于XML Schema的方式验证XML。

如果有人知道如何在不使用任何工具(Java或任何其他工具)的情况下验证XML,请分享您的想法。

4 个答案:

答案 0 :(得分:3)

当然,您可以编写一个程序来进行XML的自定义验证。问题是,你为什么要这样做?声明性模式语言是有充分理由发明的。

如果确实需要强制执行难以用声明性模式语言表达的验证规则,请考虑使用XSLT样式表:它将只是您用Java编写的代码行数的一小部分,并且更容易维持。

答案 1 :(得分:1)

是的,您可以在没有架构的情况下验证XML,但这样做是非常正统的。

模式通常是以声明方式表达语言可接受性的语法。您可以编写过程代码,根据您希望的任何条件检查XML。这样的代码更难用于传达您的标准,但这是可能的。您甚至可以使用标准的XML解析器来进行繁重的解析(包括检查格式良好),并通过过程代码简单地处理您需要的任何域检查。

如果您愿意使用某些架构而不是W3C XML架构(XSD),则可以考虑使用DTD,RELAX NG或Schematron。

答案 2 :(得分:1)

一般来说,'schema'是一个词,我们用来描述一个简洁的语句,通常是机器可处理的形式,我们想要遵循的数据集合(这里是一个XML文档); 'validation'是决定给定数据集是否遵循这些规则的过程。

验证没有架构的文件非常类似于检查汽车是否遵守速度限制,在一段没有规定最高速度的道路上,或者在没有规则的运动中担任裁判所以,因此不需要裁判:没有那么多不可能是无意义的。

我认为实际上“没有架构”可能意味着“使用除XSD以外的某种语言的架构” - 当然,您可以使用DTD或Relax NG或Schematron - 实际上您可以使用任何一种大量其他模式语言,但其中大多数现已不存在。或者你的意思是“不用任何声明性语言写下验证规则”,例如通过编写Java程序。也有可能,虽然不太可能产生可靠的结果。正如Michael Kay已经建议的那样,像XSLT这样的语言可以为大多数XML词汇表提供更紧凑的程序。

答案 3 :(得分:0)

没有这样的事情。如果没有架构,您可以做的最多就是检查文档的格式是否正确。所有其他语义都在架构内,或者必须是自定义编码。

相关问题