2013-08-18 8 views
0

Java에서 Xerces를 사용하여 XML 문서의 유효성을 검사하고 있지만 오류가 발생하지는 않습니다.많은 XSD의 잘못된 XML 문서에 대한 XML 유효성 검사가 Java의 오류를보고하지 않습니까?

그러나 XML 문서에는 오류가 있으며 예를 들어 XMLSply 편집기로 유효성을 검사하면 오류가 올바르게보고됩니다.

내가 잘못하고있는 것을 찾을 수 없습니다. 필자는 올바르게 검증해야하는 모든 XSD 스키마를 포함한다고 생각합니다.

조언 좀 해주시겠습니까? 코드 조각 :

SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
factory.setErrorHandler(new ErrorHandlerDefault()); 
Schema schema = factory.newSchema(createSchemaSources()); 
validator = schema.newValidator().validate("file.xml"); 

I 유효성을 검사하는 데 사용하는 XSD의 :

private Source[] createSchemaSources() throws IOException { 
Source[] sources = new Source[5]; 
sources[0] = createSource("http://www.nltaxonomie.nl/7.0/domein/bd/tuples/bd-bedr-tuples.xsd"); 
sources[1] = createSource("http://www.nltaxonomie.nl/7.0/basis/bd/items/bd-burgers.xsd"); 
sources[2] = createSource("http://www.nltaxonomie.nl/7.0/domein/bd/tuples/bd-burg-tuples.xsd"); 
sources[3] = createSource("http://www.nltaxonomie.nl/7.0/basis/sbr/types/nl-types.xsd"); 
sources[4] = createSource("http://www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd"); 
return sources; 
} 

xml 파일의 작은 조각이 검증 된이 (너무 커서 모두를 나열) :

<bd-burgers:CommutingExpensesDaysPerWeekCount unitRef="uu_513" contextRef="cc_711">2</bd-burgers:CommutingExpensesDaysPerWeekCount> 

이 항목에 오류가 있습니다. 즉,

Numeric item <bd-burgers:CommutingExpensesDaysPerWeekCount> has neither a 'precision' nor a 'decimals' attribute. 

이것은 XMLSpy에서 올바르게보고되었지만 자바 코드로는 올바르게보고되지 않았습니다. ( 그래서 내가 뭘 잘못하고 있니? XSD 파일을 잊어 버렸지 만 "CommutingExpensesDaysPerWeekCount"는 "http://www.nltaxonomie.nl/7.0/basis/bd/items/bd-burgers.xsd"에 정의되어 있으며 위의 xsd에 포함되어있는 "http://www.nltaxonomie.nl/7.0/basis/sbr/types/nl-types.xsd"에 포함 된 "nonNegativeIntegerItemType"유형에 해당하는 xsd보다 위에 포함되어 있습니다. "monetaryItemType"을 확장하고 "http://www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd"에 정의 된 xsd는 위 유효성 검사에도 포함됩니다.

Java 유효성 검사가 오류를보고하지 않는 이유는 무엇입니까?

는 BTW : 모든 속성을 제거 :입니다

<bd-burgers:CommutingExpensesAccordingToTableTotalAmount>841.0</bd-burgers:CommutingExpensesAccordingToTableTotalAmount> 

: 그것은 내가 위의 XML 조각을 변경하면 오류를보고한다. 그런 다음 contextRef가 없다는 올바른 Validation 오류가 발생합니다.

답변

0

XBRL은 XML을 적용한 것으로서 XBRL은 문서를 유효한 XBRL 문서로 간주하려면 XML 이외의 추가 규칙이 있습니다. XBRL 문서 유효성은 XBRL 사양에 문서화되어 있으며 here입니다. 규칙의 "추가 레이어"로 인해 유효한 XML은 유효하지 않은 XBRL이 될 수 있습니다. 다음과 같은 두 가지 유효성 검사 단계가 수행됩니다.

  1. 문서가 유효한 XML 문서인지 확인하십시오.
  2. XBRL 사양에 문서화 된대로 모든 XBRL 유효성 검사 규칙을 따르도록하십시오.

자바 코드는 단순히 XML을 구문 분석, 그래서는 1 단계 검증 (문서가 유효한 XML 문서 있는지 확인)를 수행한다. 수준 2 유효성 검사를 수행하려면 추가 코드가 필요합니다 (XBRL 사양에 설명 된대로 모든 XBRL 유효성 검사 규칙을 따르도록하십시오).

제 생각에 XMLSpy는 XBRL을 이해할 수 있으며 (here과 같이) 두 가지 유효성 검사 수준을 모두 수행 할 수 있습니다. 표시되는 오류 (숫자 항목이 ...)는 XMLSpy가 XBRL 문서로 알려진 모든 문서에 대해 특히 유효성을 검사하는 XBRL 유효성 검사 오류입니다.

XBRL 문서의 유효성을 검사하려면 코드에서 사용할 수있는 Java 기반 XBRL 유효성 검사 엔진을 사용해야합니다. .NET을 사용할 수 있다면 Gepsio를 사용 하시길 바랍니다. here.

+0

감사합니다. 나는 다른 XBRl 유효성 검사 단계/레벨, FRIS, 비즈니스 제약 등과 같은 것을 알고 있습니다. 그러나이 오류는 "정상적인"XSD 유효성 검사 오류 (내가 수행하는 것처럼)라고 생각합니다. 어떻게 생각합니까? 특정 XBRL 유효성 검사? 정상적인 XSD 유효성 검사를 수행 할 때도 이런 종류의 오류가 발생합니까? Gespsio를 사용할 수는 없지만 앞으로 UBMatrix를 고소하고 DTS 검색 및 유효성 검사를 사용할 계획입니다. 그러나 XBRL 유효성 검사 및 DTS 검색 오픈 소스 프로젝트가 가까운 미래에 나타날 것으로 기대합니다. – edbras