2016-08-04 2 views
1

많은 XSD 파일에 대해 XML 파일의 유효성을 검사하려고합니다. 지금은 xsd 스키마 만 수동으로 입력 할 수 있습니다. (나는 XML 파일을 검사하고 XSD 정의를 살펴 본다.) XML 파일에서 XSD 스키마 파일을 검색하려면 어떻게합니까?XML 파일에서 XSD 스키마 파일을 자동으로 검색하는 방법은 무엇입니까?

지금까지 시도한 내용 : // 다음 xml 파일을 여러 xsd 스키마 파일과 비교하여 검사하십시오.

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

사전 감사를 사용합니다.

편집 : kjhughes @ 단순히

XSD를 파일에 대한 XML 파일의 유효성을 확인하는 가장 좋은 방법은 무엇입니까 물어하지 않았다?

내 질문

: 어떻게 우리는 XML 파일에서 XSD 스키마 파일을 검색 할 수 있습니다. 예를 들어, 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. 
    } 

}); 
관련 문제