XML 文档如何根据 XSD 或 DTD 文档进行验证?

How is the XML document validated against an XSD or DTD document?

我正在努力掌握XML验证的原理。有一点我还没有明白:负责根据指定的 XSD(或 DTD)定义实际验证 XML 文档的过程是什么?

我想知道这是OS默认提供的,还是我们使用的编辑器(比如OxygenIDE)做的? 感谢您提供有用的说明。

我想知道是否

this is by default provided with the OS,

没有

or it is done by the editor we use (such as Oxygen IDE)?

也没有

它由验证 XML 处理器完成。
(当然,它可以集成在 IDE 中,例如 Oxygen)。
一个验证 XML/XSLT 处理器是 the commercial edition of Saxon: SAXON EE:

The commercial Enterprise Edition from Saxonica, supporting XSLT 3.0, XPath 2.0 and 3.1, XQuery 3.1, XML Schema 1.0 and 1.1, and XQuery Update 1.0.

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

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

在 DTD 验证的情况下,验证过程总是与 XML 解析密切相关;许多 XML 解析器可以选择打开或关闭验证,如果打开,解析器将检索 DTD 并根据它验证实例,通常 "on the fly" 在解析过程中。

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

在 XSD 模式验证的情况下,验证器可能像上面那样被捆绑为 XML 解析器的一部分,或者它可能是一个单独的组件。因此,解析器可能有一个选项可以在解析期间调用架构验证 on-the-fly,或者可能有一个 free-standing 验证实用程序。例如,在 Java 世界中,Xerces 解析器有调用 XSD 验证的选项,但在 Saxon 中也有一个模式验证器,它包括 XSLT 和 XQuery 处理,但它本身并不执行 XML 解析.

交互式开发环境 ("editors"),例如 oXygen 和 Altova XMLSpy 通常包含一个 XSD 模式验证器;这可能是他们自己开发的 (Altova) 或他们集成的 third-party 产品(oXygen 允许您在 Xerces 和 Saxon 验证器之间进行选择)。