当前位置: 首页 > 知识库问答 >
问题:

如何获取XSD1.1模式模型进行解析?

司英彦
2023-03-14

在程序集的schemaLanguage后面是“http://www.w3.org/xml/xmlschema/v1.1”,newSchema()返回类型为{org.apache.xerces.jaxp.validation.simplexmlschema}的模式。我无法导入该类,错误是-org.apache.xerces.jaxp.validation.SimpleXMLSchema类型不可见

Example: <assert test="starts-with(@partnumber,../@partnumber)"/>

任何建议/帮助都会帮助我解决这个问题。谢了。

/*
 * Xsd11SchemaValidator.java
import javax.xml.validation.SchemaFactory;*/
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.XMLConstants;
import javax.xml.transform.sax.SAXSource;
import org.xml.sax.InputSource;
import javax.xml.validation.Validator;
import java.io.*;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.ErrorHandler;
import org.apache.xerces.impl.xs.SchemaGrammar;
import org.apache.xerces.jaxp.validation.*;

class Xsd11SchemaValidator {
  private static int errorCount = 0;
  public static void main() {
      String schemaName = "Path to XSD 1.1 File";;

      Schema schema = loadSchema(schemaName);

    }
  }

  public static Schema loadSchema(String name) {
    Schema schema = null;
    try {
      String language = "http://www.w3.org/XML/XMLSchema/v1.1";
      SchemaFactory factory = SchemaFactory.newInstance(language);
      schema = factory.newSchema(new File(name));
    } catch (Exception e) {
      System.out.println(e.toString());
    }
    return schema;
  }
}

共有1个答案

宋丰
2023-03-14

官方的Xerces版本似乎还不支持XSD1.1。然而,以下Maven依赖关系对我来说很好:

    <dependency>
        <groupId>org.opengis.cite.xerces</groupId>
        <artifactId>xercesImpl-xsd11</artifactId>
        <version>2.12-beta-r1667115</version>
    </dependency>

这里有一些解析V1.1的示例代码。XSD:

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;

...

private static void validateFile(File xmlFile, File xsdFile) throws SAXException, IOException {
    SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/XML/XMLSchema/v1.1");
    File schemaLocation = xsdFile;
    Schema schema = factory.newSchema(schemaLocation);
    Validator validator = schema.newValidator();
    Source source = new StreamSource(xmlFile);
    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());
    } }
 类似资料:
  • 我正在尝试为Swagger中的项目获取模型模式。我想通过一个http请求来实现这一点,该请求来自不同于托管Swagger的机器。 我可以从以下位置获取作为json的Swagger API文档: 该响应包含: 是否有任何方法获取“/definitions/Item”模型模式? 我想做一个http获取,比如: 我使用的是Swagger 2.0版。 谢谢

  • 错误是: 方法引发了'java.lang.NullPointerException'异常。无法计算pl.netizens.eonbeacon.storage.eonbeaconmodel.ToString() Eeid,Eeid模型:

  • 实体: JPA元模型: 我将做如下的事情: 我在元模型中没有看到任何自动生成的与表名相关的属性。如何在联接条件中使用元模型表名(我不想使用硬编码字符串)? PS:我使用的是Spring MVC和命名策略,所有camel大小写都用下划线分隔。

  • 假设我们有一个泛型类: 然后,我们希望将与和的进行模式匹配:

  • 我刚刚开始在应用程序中使用Hibernate。另外,我使用JPA存储库来使用自定义查询。我有多个实体,它们之间有关系。我在join列上使用了提取模式'Eagery',还使用了缓存。我观察到Hibernate正在进行多个select查询来获取每个实体,而不是在单个查询中执行。 Hibernate为上述语句发出一个select查询。 每当我执行时,它就会对entityB发出另一条select语句。如何

  • 行为型模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化。 行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。 通过行为型模式,可以更加清晰地划分类与对象的职责,并研究系统在运行时实例对象之间的交互。在系统运行时,对象并不是孤立的,它们可以通过相互通信与协作完成某些复杂功能,一个对象在运行时也将影响到其他对象的运行。 行为型模式分为类行为型模式