Java XSD:仅通过强制验证

时间:2017-03-02 09:59:07

标签: java xml validation xsd

我有以下XSD验证:

SchemaFactory schemaFactory = SchemaFactory
           .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(new File(xsdPath));
validator = schema.newValidator();
Source xml = new StreamSource(new ByteArrayInputStream(xml));
validator.validate(vastXml);

如何仅通过必填字段/元素(minOccur>0, use="required")来验证XML 即如果XML中存在不在XSD中的争用,则验证将成功 只有当缺少一个必填字段时,它才会失败。

2 个答案:

答案 0 :(得分:2)

如果要检查某些约束而不检查其他约束,唯一的方法是修改架构,使其仅包含您要检查的约束。我认为任何模式处理器都不会允许您在检查某些约束方面而不是其他约束条件时选择。

答案 1 :(得分:1)

XML Schema支持未在架构中定义的元素的占位符,但这与minOccurs属性无关:

<xs:any processContents="lax"/>

您可以调整:

  • 具有namespace属性的元素的命名空间:

    <xs:any namespace="##any" processContents="lax"/>
    <xs:any namespace="##other" processContents="lax"/>
    <xs:any namespace="##local" processContents="lax"/>
    <xs:any namespace="##targetNamespace" processContents="lax"/>
    <xs:any namespace="http://www.example.com" processContents="lax"/>
    
  • 应该如何严格处理。在您的情况下,lax将确保即使未定义元素,XML文档也会验证。但是,strict会要求存在架构定义。 skip只会接受任何内容。

    <xs:any namespace="##any" processContents="lax"/>
    <xs:any namespace="##any" processContents="strict"/>
    <xs:any namespace="##any" processContents="skip"/>