2016-08-04 14 views
1

多くのXSDファイルに対してXMLファイルを検証しようとしています。現時点では、xsdスキーマを手動で入力することしかできません。 (私は自分のXMLファイルをチェックし、XSDの定義を調べるという意味です)。どのようにしてXMLファイルの中のXSDスキーマファイルを検出できますか?私がこれまで試したどのような XSDスキーマファイルをXMLファイルで自動的に検出するにはどうすればよいですか?

: //以下の方法は、複数のXSDスキーマファイルに対してXMLファイルを確認してください。

public static void XSDValidation() throws SAXException, IOException, ParserConfigurationException { 

    try { 

     SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); 

     Schema sch = schemaFactory.newSchema(new Source[] { new StreamSource(new FileInputStream("role-1.2.xsd")), 
       new StreamSource(new FileInputStream("role-1.1.xsd")) }); 

     Validator validator = sch.newValidator(); 

     validator.validate(new StreamSource("role.xml")); 

     System.out.println("INFO: Validation is done successfully."); 

    } catch (Exception e) { 
     System.out.println("ERROR: Validation is failed."); 
    } 
} 

は、私はすべての助けのためのDOMパーサおよびJava 8

アドバンスのおかげを使用しています。

EDIT: kjhughes @私は単に

を求めなかったXSDファイルに対してXMLファイルを検証するための最良の方法は何ですか?

私の質問: XSDスキーマファイルをXMLファイルで検出する方法を教えてください。たとえば、b.xsdとc.xsdを含むa.xmlを検証する場合、これらのファイルを自動的に、真の順序で検出したいと考えています。つまり、XMLが最初にc.xsdの名前空間を使用する場合は、それを検出する必要があります。私の例では、XSDスキーマファイルとその順序は、XMLの内部をチェックすることによって手動で記述されていました。

+0

カスタムEntityresolverを使用して参照されるスキーマを見つける方法はありますか? – ulab

+0

@ulab私はhttps://docs.oracle.com/javase/7/docs/api/org/xml/sax/EntityResolver.htmlを読みましたが、実際に私が適用できるか理解できませんでした。もう少し説明していただけますか? – limonik

+0

これらのXSD宣言を使用したサンプルXMLが役立ちます。サンプルを投稿できますか? –

答えて

1

あなたは、スキーマの依存関係を解決するためにLSResourceResolverを使用することができます。ここではすべての依存関係を指定する必要がありますが、スキーマ参照からコードを分離しています。

schemaFactory.setResourceResolver(new LSResourceResolver(){ 
    @Override 
    public LSInput resolveResource(String type, String namespaceURI, String publicId, String systemId, String baseURI) { 
      // resovle the path to schema , read and return it. 
    } 

}); 
関連する問題