如何针对XSD或DTD文档验证XML文档?

时间:2019-06-10 22:32:25

标签: xml xsd dtd

我正在尝试掌握XML验证的原理。有一点我还没明白:针对XML文档的指定XSD(或DTD)定义实际验证XML文档的过程是什么?

我想知道这是操作系统默认提供的还是由我们使用的编辑器(例如Oxygen IDE)完成的? 感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

我想知道

  

这是操作系统默认提供的

否。

  

是由我们使用的编辑器(例如Oxygen IDE)完成的?

也没有。

这是由经过验证的XML处理器完成的。
(当然可以将其集成到Oxygen之类的IDE中。)
the commercial edition of Saxon: SAXON EE是一种可验证的XML / XSLT处理器:

  

Saxonica的商业企业版,支持XSLT 3.0,XPath 2.0和3.1,XQuery 3.1,XML Schema 1.0和1.1以及XQuery Update 1.0。

另一种可能性是使用Xerces,这是一个开放源代码验证解析器described in this SO answer

答案 1 :(得分:0)

Oxygen使用Apache Xerces / J(Java)XML套件针对DTD或XSD解析和验证XML(例如,参见https://www.oxygenxml.com/forum/topic15534.html)。 Apache Xerces很可能是经过高度定制的,并扩展了在Oxygen中使用的其他JAXP组件,例如DTD和XSD元数据以进行交互式编辑以及针对RNG进行验证等。

答案 2 :(得分:0)

对于DTD验证,验证过程始终与XML解析紧密相关;许多XML解析器都有打开或关闭验证的选项,如果打开,解析器将检索DTD并针对它验证实例,通常在解析过程中“动态”。

XML解析器可能与您的编程语言一起提供(例如Java,C#,Python),或者它们可能是独立的第三方库。有些可能与操作系统捆绑在一起,但它们实际上并不是操作系统的一部分。

在XSD模式验证的情况下,验证器可能如上所述捆绑为XML解析器的一部分,或者可能是单独的组件。因此,解析器可以选择在解析过程中即时调用模式验证,或者可能有独立的验证实用程序。例如,在Java世界中,Xerces解析器具有调用XSD验证的选项,但Saxon中还有一个模式验证器,其中包括XSLT和XQuery处理,但本身不进行XML解析。

诸如oXygen和Altova XMLSpy之类的交互式开发环境(“编辑器”)通常包括XSD模式验证器。这可能是他们自己开发的(Altova)或他们集成的第三方产品(oXygen允许您在Xerces和Saxon验证器之间进行选择)。