没有确定如何验证任意 XML 文档的 100% 万无一失的过程。
例如,这个 2.4 版Web 应用程序部署描述符指定了一个W3 模式来验证文档:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
然而,这是表达同一件事的同样有效的方式:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee">
RELAX NG似乎没有在文档中提供任何提示您应该使用它的机制。验证机制由文档消费者而非生产者决定。如果我没记错的话,这是推动从 DTD 转向更现代的验证机制的动力之一。
在我看来,最好的办法是根据您正在处理的文档类型集定制机制检测器,读取标题信息并酌情解释它。StAX 解析器对此很有用——因为它是一种拉机制,您可以只读取文件的开头,然后在第一个元素上退出解析。
链接到更多相同和示例代码等等。