XSD 本身验证与 XML 验证器针对 XSD 架构的验证差异

问题描述 投票:0回答:1

我试图理解验证 XSD 文件本身和根据 XSD 架构验证 XML 之间的区别。我看到有两个概念,但我不知道在我的情况下应该使用哪一个。

假设我想在解析从远程服务器收到的 XML 文件之前验证 XSD 文件。

它应该看起来或多或少像这样:

if (validateXsdSchema(contentBytes.inputStream())) {
     fileVerifcation = xmlParser.parse(contentBytes.inputStream())
 }

在解析之前,我添加了一个 if 检查,其中应进行 XSD 验证。如果成功则执行解析,否则不执行。

我有一个具有可用结构的 XSD 文件,每个 XML 文件都来自远程服务器。我的第一个问题是:XSD 验证总是需要 XML 文件(它在此类验证中扮演什么角色?)或者 XSD 文件是否足够?

我有两个函数

validateXsdSchema
,但我真的不知道应该使用哪一个来执行此类 XSD 验证。

1.

@Throws(SAXException::class, IOException::class)
    private fun validateXsdSchema(content: InputStream): Boolean {
        try {
            val validator = createXsdSchemaValidator()
            val xmlFile: Source = StreamSource(content)
            validator.validate(xmlFile)
            return true
        } catch (exception: SAXException) {
            return false
        }
    }
 @Throws(SAXException::class)
    private fun createXsdSchemaValidator(): Validator {
        val schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
        val schemaSource: Source = StreamSource(
            javaClass.classLoader
                .getResourceAsStream(SCHEMA_XSD_FILENAME)
        )

        val schema = schemaFactory.newSchema(schemaSource)
        val validator = schema.newValidator()
        return validator
    }

2.

 public static boolean validate(String xml) {
        SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        try {
            File schemaFile = ResourceUtils.getFile("SCHEMA_XSD_FILENAME");
            Schema schema = factory.newSchema(schemaFile);
            Validator validator = schema.newValidator();

            Source source = new StreamSource(new StringReader(xml));

            validator.validate(source);
        } catch (IOException | SAXException e) {
            log.error(e.getMessage());
            return false;
        }

        return true;
    }

也许还有另一种方法来验证 XSD 文件? 预先感谢您的解释。

java xml spring-boot kotlin xsd
1个回答
0
投票

验证 XSD 文件将检查 XML 架构定义 (XSD) 是否正确且未引用未知对象以及结构是否正常。

通常,您使用在线验证器或尝试从 XSD 生成代码模型时执行此步骤(例如用于稍后解析的 java 源文件)

当您从远程服务器接收 XML 时,在解组/解析方法中添加架构将允许解组器根据 XSD 文件检查 XML,因此如果 XML 根据 XSD 不正确(缺少强制属性/元素...)

根据您对上下文的解释,我猜想您只对用于解析远程输入的 XSD 文件的 XML 验证感兴趣,并确保根据架构定义它没有任何解析错误。

© www.soinside.com 2019 - 2024. All rights reserved.