如何在Java中针对XSD 1.1validationXML?

在Java中针对XML Schema 1.1validationXML文件的最佳方法是什么?

我从本教程中获取了代码并更改了工厂查找的行以使用XML Schema 1.1,正如我在Xerces FAQ中的代码示例中看到的那样。

这是我的代码:

import java.io.File; import java.io.IOException; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import org.xml.sax.SAXException; public class XSDValidator { private static void validateFile(File xmlFile, File xsdFile) throws SAXException, IOException { // 1. Lookup a factory for the W3C XML Schema language SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/XML/XMLSchema/v1.1"); // SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); // 2. Compile the schema. File schemaLocation = xsdFile; Schema schema = factory.newSchema(schemaLocation); // 3. Get a validator from the schema. Validator validator = schema.newValidator(); // 4. Parse the document you want to check. Source source = new StreamSource(xmlFile); // 5. Check the document try { validator.validate(source); System.out.println(xmlFile.getName() + " is valid."); } catch (SAXException ex) { System.out.println(xmlFile.getName() + " is not valid because "); System.out.println(ex.getMessage()); } } } 

代码抛出此exception:

 java.lang.IllegalArgumentException: No SchemaFactory that implements the schema language specified by: http://www.w3.org/XML/XMLSchema/v1.1 could be loaded 

正如我所看到的,我与Xerces FAQ中的代码片段具有完全相同的导入。 我甚至尝试将Xerces添加到我的Maven依赖项中,但这也没有帮助。

干杯:)

我认为您不能使用JAXP服务机制来搜索XSD 1.1处理器。 以正常方式加载Saxon或Xerces,然后启用XSD 1.1处理。 对于撒克逊人来说,这是使用

 SchemaFactory.setProperty("http://saxon.sf.net/feature/xsd-version", "1.1") 

不幸的是,JDK捆绑版本(从Java 8开始)和maven central(2.11.0)的最新官方版本都没有包含XSD 1.1实现。

您实际上需要2.11.0-xml-schema-1.1-beta版本的Xerces才能在您链接的FAQ中运行该示例。

您可以执行以下操作之一。

  1. 从Xerces网站下载Xerces2 Java 2.11.0 (XML Schema 1.1) (Beta)二进制文件,并手动将jar添加到类路径(或通过Maven在本地安装)。 链接: http : //xerces.apache.org/mirrors.cgi 。 您至少需要以下内容:

     cupv10k-runtime.jar org.eclipse.wst.xml.xpath2.processor_1.1.0.jar xercesImpl.jar xml-apis.jar 
  2. 使用以下非官方maven依赖项。

      org.opengis.cite.xerces xercesImpl-xsd11 2.12-beta-r1667115  

有一个通用的XMLvalidation器可以使用XML Schema v1.1,它使用xercesImpl-xsd11 2.12-beta-r1667115 。 validation器在这里可以作为Maven插件使用 , 在这里作为可嵌入的库 。