2012-09-04 4 views
4

as Validating a HUGE XML file 동의하지만 여전히 혼란 스럽습니다 ... SAX 구문 분석을 통해 XML 스키마 유효성 검사를 수행하는 방법은 무엇입니까? 스키마 유효성 검사는 예를 들어 XML 참조를 앞뒤로 반복하여 키 참조 등을 수행해야합니다. 전체 XML을 메모리에서 사용할 수 있습니까? 멍청한 질문 :(죄송합니다, 유효성 검사를 시작하기 전에 메모리에 스키마/DTD 트리를 구축해야SAX를 사용한 XML 스키마 검증 - 어떻게 작동합니까?

답변

4

확인 스키마는 거의 제로 (0) 메모리로 수행 될 수 있습니다 .UPA 제약 조건은 컨텐트 모델에 대한 유효성 검사가 백 트랙킹을 필요로하지 않음을 보장합니다. 물론 스택의 모든 요소에 대한 컨텐트 모델의 FSM 상태를 추적해야합니다. 는 문서의 최대 중첩 깊이에 비례하는 메모리입니다.

ID/IDREF 유효성 검사는 예외입니다.이 경우 프로세서 ID와 IDREF 값의 수에 비례하여 메모리가 필요합니다. 명백히 프로세서는 발견 된 모든 ID와 IDREF 값을 기억하고 문서 끝에 도달하면 ID가 두 번 나타나지 않고 모든 IDREF가 ID 사이에 표시되는지 확인합니다. 마찬가지로 unique/key/keyref를 확인하기 위해 프로세서는 어떤 키 값이 발견되었는지 기억해야합니다. 그러나이를 위해 필요한 메모리는 "전체 XML을 메모리에 유지"하는 것보다 훨씬 적습니다.

+0

그 위대한 답변에 감사드립니다. UPA 란 무엇입니까? FSM은 유한 상태 기계입니다. – Vishal

+0

UPA = 고유 한 입자 속성. 내용 모델이 모호하지 않도록하는 XSD의 제약 조건입니다. FSM = 유한 상태 기계. –

0

대부분의 파서 후 가끔 그 대부분은 순차적으로 조회하고 약간의 압력, 들여다 팝.에 대한

+0

그래서 스키마가 DOM으로로드되지만 실제 XML은 아니며 구문 분석은 원하는만큼로드를 계속 진행합니다. – Vishal