2017-03-02 44 views
1

我有後續的XSD驗證,只確認:Java的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); 

如何只能通過強制字段驗證XML /元素(minOccur>0, use="required")
也就是說,如果存在這樣是XML格式的contenct不在XSD中,驗證將會成功。
僅當其中一個必填字段丟失時,它將失敗。

回答

1

XML架構支持未在架構中定義的元素佔位符,但是這是獨立於minOccurs屬性:

<xs:any processContents="lax"/> 

您可以調整:

  • 與元素的名稱空間a 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"/> 
    
+0

已解決,謝謝! –

1

如果你想檢查的一些限制,但不是別人的,唯一的辦法就是修改架構,以便它不僅包括要檢查的約束。我認爲任何模式處理器都不會允許您在檢查某些約束條件方面具有選擇性,但不會對其他方面進行檢查。