2011-03-08 5 views
1

이것이 내 XML입니다.로컬 XSD 파일없이 XML 스키마에 대해 XML의 유효성을 검사하는 방법

<?xml version="1.0"?> 
<root xmlns="http://example.com/first-schema.xsd" 
    xmlns:f="http://example.com/second-schema.xsd"> 
    <f:foo>test</f:foo> 
</root> 

이제이 XML이 XMLSchema-valid인지 확인하고 싶습니다. 이 first-schema.xsdsecond-schema.xsd 파일은 로컬에 없습니다. 게다가, 나는 그들에 대해 아무것도 모른다. 난 그냥 내 XML 문서 스키마에 대해 유효한지 확인하고 싶습니다. Java로 할 수 있습니까?

+2

이것은 의미가 없습니다. 스키마 파일이 없으면 문서가 스키마를 준수하는지 확인할 수있는 방법이 없습니다. –

+0

@ 그런데 아무런 의미가 없다는 것을 알지 못합니까? – yegor256

+0

"** its ** ** schemas"란 무엇입니까? 네임 스페이스 URI에 사용 된 URL에서 검색하여'first-schema.xsd' 및'second-schema.xsd'에 대해 유효성을 검사할지 여부 또는 인스턴스 문서를 다른 이름으로 유효성을 검사할지 여부 (예 : 이름이없는 스키마). 인스턴스 파일의 유효성을 검사 할 스키마를 명확히하십시오. –

답변

3

javax.xml.validation API를 사용할 수 있습니다.

:

SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
URL schemaURL = // The URL to your XML Schema; 
Schema schema = sf.newSchema(schemaURL); 
Validator validator = schema.newValidator(); 
DOMSource source = new DOMSource(xmlDOM); 
validator.validate(source); 

은 아래의 예는 스키마에 대해 JAXB 객체 모델의 유효성을 검사하지만, 당신이 DOM에 대한 DOMSource 인으로 JAXBSource를 대체 할 쉽게 볼 수 있습니다 방법을 보여줍니다

+0

고마워요,하지만 이건 제가 찾고있는 것이 아닙니다. 필자는 XML 스키마가이 문서에서 사용되는 것을 모르기 때문에 XML 스키마에 URL **이 없다는 점에 대해 설명했습니다. – yegor256

+1

StAX XMLStreamReader를 사용하여 XML을 구문 분석 할 수 있습니다. 그런 다음 xmlns 선언에서 스키마를 스누핑 할 수 있습니다 (xmlns 선언의 URI는 실제 URL로 보장되지 않습니다). 그런 다음 StAXSource 대신 유효성 검사 코드를 사용하십시오. –

관련 문제