VTD-XML

VTD-XML
VTD-XML
개발자XimpleWare
안정적 해제
2.12 / 2015년 11월 19일; 6년(2015-11-19)
운영 체제휴대용
플랫폼Java, C#, C 및 C++
유형XML 파서/인덱서/slicer/editor 라이브러리
면허증GPL 및 독점 라이선스
웹사이트vtd-xml.원천 포브스이오 x이벤트웨어wordpress.com

VTD-XML(Virtual Token Descriptor for eXtensible Markup Language, VTD)는 비추출적[1][2] XML, VTD(Virtual Token Descriptor)라고 하는 "문서 중심" 구문 분석 기법을 중심으로 한 교차 플랫폼 XML 처리 기술의 집합을 말한다.관점에 따라 VTD-XML은 다음 중 하나로 볼 수 있다.

  • "문서 중심"[3][4] XML 구문[5][6][7] 분석기
  • 텍스트 XML을[8] 향상시키기 위해 이진 데이터를 사용하는 네이티브 XML 인덱서 또는 파일 형식
  • 증분 XML 내용 한정자
  • XML 슬라이서/분할기/조립기[9]
  • XML 편집기/추적자
  • 칩에서[10][11][12] XML 처리를 포트화하는 방법
  • 차단되지 않고 상태 비저장 XPath 평가자[13]

VTD-XML은 XimpleWare에 의해 개발되었으며 GPL과 독점 라이센스에 따라 이중 라이센스가 부여된다.원래는 자바어로 쓰여있지만, 현재는 C,[14] C++, C#로 이용할 수 있다.

기본개념

비추출성 문서 중심 구문 분석

전통적으로 어휘 분석기는 토큰(분리할 수 없는 문자 값의 작은 단위)을 이산 문자열 개체로 나타낸다.이 접근방식은 추출물 파싱으로 지정된다.이와는 대조적으로, 추출하지 않는 토큰화는 원본 텍스트를 그대로 유지하고 오프셋과 길이를 사용하여 토큰을 설명해야 한다.

가상 토큰 설명자

VTD(Virtual Token Descriptor)는 XML 프로세싱에 비추출성 문서 중심 구문 분석 개념을 적용한다.VTD 레코드는 64비트 정수를 사용하여 토큰의 오프셋, 길이, 토큰 유형 및 내포 깊이를 XML 문서에 인코딩한다.모든 VTD 레코드는 길이가 64비트이기 때문에 효율적으로 저장하고 어레이로 관리할 수 있다.[15]

위치 캐시

위치 캐쉬(LC)는 VTD 레코드를 기반으로 구축되어 효율적인 무작위 액세스를 제공한다.내포 깊이 수준당 하나의 테이블로 구성된 LC에는 XML 문서의 요소 계층 구조를 모델링하는 항목이 포함되어 있다.LC 항목은 32비트 값의 쌍을 인코딩하는 64비트 정수다.상위 32비트는 해당 요소에 대한 VTD 레코드를 식별한다.하위 32비트는 다음 하위 중첩 수준에서 LC에서 해당 원소의 첫 번째 아동을 식별한다.

혜택들

개요

VTD-XML의 거의 모든 핵심 이점은 다음과 같은 특성을 제공하는 비추출적 문서 중심 구문 분석에만 내재되어 있다.

  • 원본 XML 텍스트는 디코딩 없이 메모리에 그대로 유지된다.
  • VTD-XML의 내부 표현은 본질적으로 지속적이다.
  • XML 계층 구조를 나타내기 위해 원시 데이터 유형(예: 64비트 정수)에 전적으로 의존하므로 계층적 표현에 대한 객체 지향 모델링을 방지하여 객체 생성 비용을 거의 0으로 줄인다.[16]

이러한 특성을 결합하면 XML을 객체의 직렬화/직렬화 대신 구문(비트, 바이트, 오프셋, 길이, 조각, 네임스페이스 보정 조각, 문서 구성)으로 생각할 수 있다.이것은 XML/SOA 응용 프로그램에 대해 생각하는 강력한 방법이다.

순응

VTD-XML은 XML 1.0(DTD 부분 제외) 및 XML 네임스페이스 1.0을 엄격히 준수한다.기본적으로 XPath 2.0 내장 기능으로 확장된 XPath 1.0 규격(기본 데이터 모델의 측면에서 일부 미묘한 차이점 포함)을 준수한다.

단순성

애즈 파서

구문 분석 모드에서 VTD-XML을 사용할 경우 다른 XML 파서들과 비교가 잘 되는 매우 고성능의[17] 범용 XML 파서가 된다.

  • VTD-XML은 전체 랜덤 액세스와 내장형 XPath 지원을 여전히 제공하면서 일반적으로 (NULL 콘텐츠 핸들러 포함) 색스보다 뛰어나다.[citation needed]
  • VTD-XML은 일반적으로 XML 문서 크기의 1.3-1.5배를 소비하는데, 이는 DOM의[citation needed] 메모리 사용량의 약 1/5이다.
  • VTD-XML로 작성된 애플리케이션은 일반적으로 DOM 또는 SXX 버전보다 훨씬 짧고 깨끗하다.[citation needed]

인덱서로서

VTD-XML의 고유 지속성 때문에 개발자는 구문 분석된 XML 문서의 내부 표현을 디스크에 기록한 후 나중에 다시 로드하여 반복적인 구문 분석을 방지할 수 있다.이를 위해 XimpleWare는 VTD, LC, XML 텍스트를 결합한 바이너리 패키징 형식으로 VTD+XML을 도입했다.일반적으로 다음 두 가지 방법 중 하나로 볼 수 있다.

  • 파싱 비용을 완전히 없애고 XML의 모든 이점을 유지하는 네이티브 XML 인덱스. 인간이 읽을 수 있고 XML과 역호환 가능한 파일 형식이다.[citation needed]
  • 이진 데이터를 사용하여 XML 텍스트의 처리를 향상시키는 이진 XML 형식.

XML 내용 한정자

VTD-XML은 XML 텍스트를 디코딩하지 않고 그대로 유지하므로 응용프로그램이 XML의 내용을 수정하려는 경우 변경사항과 가장 관련성이 높은 부분만 수정하면 된다.아무리 작은 변화라도 파싱과 재시리얼화 비용이 발생하는 DOM, SAX, 또는 StAx 파싱과는 극명한 대조를 이룬다.

VTD는 오프셋별 문서 요소를 참조하기 때문에 문서의 앞에서 발생하는 요소의 길이를 변경하면 이후의 모든 요소를 참조하여 VTD를 조정할 필요가 있다.그러나 그러한 조정은 복수의 표에 있는 많은 정수에도 불구하고 정수 추가이므로 신속하다.

XML 슬라이서/분할기/조립기

VTD-XML을 기반으로 하는 애플리케이션은 오프셋과 길이를 사용하여 토큰 또는 요소 조각을 처리할 수도 있다.이를 통해 XML 문서를 바이트 배열처럼 조작할 수 있다.

  • 슬라이서로서 VTD-XML은 XML 문서에서 토큰이나 요소 조각을 "슬라이싱"한 다음, 동일한 문서의 다른 위치 또는 다른 문서에 다시 삽입할 수 있다.
  • 분할자로서 VTD-XML은 XML 문서의 하위 요소를 분할하여 각각 별도의 XML 문서로 덤프할 수 있다.
  • 조립자로서 VTD-XML은 여러 XML 문서에서 청크를 "삭제"하여 새로운 XML 문서로 조립할 수 있다.

XML 편집기/추적자

편집자/Eraser로 사용되는 VTD-XML은 토큰 길이가 의도된 새 콘텐츠보다 넓을 경우 XML 텍스트의 기본 바이트 콘텐츠를 직접 편집/삭제할 수 있다.이 접근법의 즉각적인 이점은 애플리케이션이 원래의 VTD와 LC를 즉시 재사용할 수 있다는 것이다.반대로, XML 문서를 점진적으로 업데이트하기 위해 VTD-XML을 사용하는 경우, 응용프로그램은 업데이트된 문서를 처리하기 전에 재분석해야 한다.

편집자는 각 토큰의 위치를 추적할 수 있을 정도로 똑똑하게 만들 수 있으며, 원본 문서를 저장하는 데 사용된 외부 메모리에 새 토큰을 단지 별도의 메모리로 주소를 지정함으로써 기존 토큰보다 더 긴 새 토큰을 대체할 수 있다.마찬가지로, 문서를 재주문할 때 요소 텍스트는 복사할 필요가 없고 LC만 업데이트하면 된다.저장 시와 같이 완전하고 연속적인 XML 문서가 필요할 때, 이질적인 부분은 새로운 연속적인 문서로 재조립될 수 있다.

기타급여

VTD-XML은 또한 차단되지 않은 상태 비상태의 XPath 평가 접근방식을 개척한다.[citation needed]

약점

VTD-XML도 몇 가지 눈에 띄는 단점이 있다.

  • XML 파서로서 DTD에 선언된 외부 실체를 지원하지 않는다.
  • 파일 형식으로는 문서 크기를 30%~50% 정도 늘린다.
  • API로서 DOM, SAX, StAX와 호환이 되지 않는다.
  • 구문 분석 중인 XML 인스턴스를 수정해야 하는 DTD 및 XML 스키마(예: 기본 속성 및 요소)에 의해 채택된 특정 유효성 검사 기법을 지원하기는 어렵다.

응용 분야

DOM 또는 SAX를 위한 범용 교체

VTD-XML의 성능과 메모리 장점 때문에, 그것은 XML 사용 사례에서 DOM이나 SAX보다 더 큰 부분을 차지한다.[18]

  • DOM에 비해 VTD-XML은 동일한 양의 물리적 메모리에 대해 더 큰(3배~5배) XML 문서를 성능 약 3배에서 처리한다.
  • VTD-XML은 색스와 비교해 랜덤 액세스와 XPath 지원을 제공하며 색스를 최소 2배 이상 능가한다.

대용량 XML 문서에 대한 XPath

VTD-XML의 확장판은 64비트 JVM과 결합되어 거대한 XML 문서(최대 256GB)에 대한 XPath 기반 XML 처리가 가능하다.

SOA/WS/XML 보안용

VTD-XML의 고성능과 증분 업데이트 기능이 결합되어 SOA/WS/XML 보안 애플리케이션에 대해 원하는 수준의 서비스 품질을 달성하는 것이 필수적이다[19][20][21].

SOA/WS/XML 중개자용

VTD-XML은 XML 라우터/스위치/게이트웨이, 엔터프라이즈 서비스 버스 및 서비스 통합 지점과 같은 SOA 중간 애플리케이션에 매우 적합하다.이러한 모든 애플리케이션은 지연 시간을 최소화하기 위해 원래 XML을 유지하는 것이 중요한 기본 "저장 후 전달" 작업을 수행한다.VTD-XML의 증분 업데이트 기능도 전달 성능에 크게 기여한다.

VTD-XML의 랜덤 액세스 기능은 AJAX 및 SOA 배치에서 공통적으로 사용되는 XPath 기반 XML 라우팅/스위치/필터링에 적합하다.

지능형 SOA/WS/XML 로드 밸런싱 및 오프로드

XML 문서가 여러 중간 계층 SOA 구성요소를 통해 이동할 때 XML 문서의 검사를 마친 후 첫 번째 메시지 중지에서는 반복적인 구문 분석을 피하기 위해 VTD+XML 파일 형식을 다운스트림 구성요소로 전송하도록 선택할 수 있으므로 처리량이 향상된다.

동일한 토큰에 의해 지능형 SOA 로드 밸런서는 수신/출력 SOAP 메시지에 대한 VTD+XML을 생성하여 이러한 메시지를 수신하는 애플리케이션 서버에서 XML 구문을 오프로드하도록 선택할 수 있다.

XML 지속성 데이터 저장소

네이티브 XML 지속성의 관점에서 볼 때 VTD-XML은 인간이 읽을 수 있고 사용하기 쉬운 범용 XML 인덱스로 사용될 수 있다. 이러한 방식으로 저장된 XML 문서는 파싱/재시리얼화의 오버헤드 없이 쿼리, 업데이트 또는 편집될 수 있다.

스키말리스 XML 데이터 바인딩

VTD-XML의 고성능, 낮은 메모리 사용량 및 효율적인 XPath 평가의 조합은 전적으로 XPath를 기반으로 한 새로운 XML 데이터 바인딩 접근법을 가능하게 한다.이 접근법의 가장 큰 이점은 XML 스키마가 더 이상 필요하지 않고 불필요한 객체 생성을 방지하며 XML 고유의 느슨한 인코딩을 이용한다는 것이다.[22]

위에서 언급한 기사에서 논의된 데이터 바인딩은 애플리케이션에서 구현해야 한다: VTD-XML 자체는 접근자만 제공한다.이와 관련하여 VTD-XML은 다른 XML 파서(DOM, JAXB, XMLBeans)와 마찬가지로 데이터 바인딩 패키지에 대한 추출 기능을 제공하지만 데이터 바인딩 솔루션 자체가 아니다(JiBX, JAXB, XMLBeans와는 달리).

필수반

버전 2.11을 기준으로 VTD-XML의 Java 및 C# 버전은 다음과 같은 클래스로 구성된다.

  • VTDGener(VTD Generator, VTD Generator)는 주 구문 분석, 인덱스 로딩, 인덱스 쓰기 기능을 캡슐화하는 클래스다.
  • VTDNavigator(VTD Navigator)는 (1) XML, VTD 및 계층 정보를 캡슐화하고, (2) 다양한 탐색 방법을 포함하며, (3) VTD 레코드와 문자열의 다양한 비교를 수행하고, (4) VTD 레코드를 원시 데이터 유형으로 변환하는 클래스다.
  • AutoPilot은 노드 레벨 반복과 XPath를 수행하는 기능이 포함된 클래스다.
  • XMLModifier는 삭제, 삽입, 업데이트와 같은 증분 업데이트 기능을 제공하는 클래스다.

확장된 VTD-XML은 다음과 같은 클래스로 구성된다.

  • VTDGenHuge(확장된 VTD 생성기)가 주 구문 분석을 캡슐화한다.
  • XMLBuffer는 XML 문서의 메모리 내 로딩을 수행한다.
  • XMLMemMappedBuffer는 XML 문서의 메모리 매핑 로딩을 수행한다.
  • VTDNavHuge(확장된 VTD Navigator)(1) XML, 확장 VTD 및 계층 정보를 캡슐화하고, (2) 다양한 탐색 방법을 포함하며, (3) VTD 레코드와 문자열의 다양한 비교를 수행하고, (4) VTD 레코드를 원시 데이터 유형으로 변환한다.
  • AutoPilot대규모 노드 레벨 반복 및 XPath 수행

코드 샘플

/* 이 자바 프로그램에서는 XMLModifier를 사용하여 점진적으로 사용하는 방법을 시연한다. * 단순 XML 구매 주문 업데이트 * 특정 이름 공간.우리도 간다. * VTDGen의 parseFile을 사용하여 프로그래밍 단순화 */  수입하다 com.x이벤트웨어*;  공중의 계급 갱신하다 {       공중의 정태의 공허하게 하다 본래의( 아그브[]) 던지다 NavException, ModifyException, IOException{             // 파일을 열고 내용을 바이트 배열로 읽음             VTDGen vg = 새로운 VTDGen();             만일 (vg.구문 분석파일("oldpo.xml", 진실의)){                 VTDNav vn = vg.겟나브();                 AutoPilot ap = 새로운 AutoPilot(vn);                 XMLModifier xm = 새로운 XMLModifier(vn);                 ap.선택XPath("/구매주문/항목/항목[@partNum='872-AA']");                  인트로 i = -1;                 하는 동안에 ((i = ap.evalXpath()) != -1){                     xm.제거하다();                     xm.삽입BeforeElement("/"n");                 }                 ap.선택XPath("/구매주문/항목/항목/USPrice[.<40]/텍스트()");                 하는 동안에 ((i = ap.evalXpath()) != -1){                     xm.updateToken(i, "200");                 }                 xm.생산량("newpo.xml");             }       } } 

참조

  1. ^ Zhang, Jimmy (May 19, 2004). "Non-Extractive Parsing for XML". XML.com. Retrieved 2020-07-24.
  2. ^ 미래를 위한 XML 프로세싱
  3. ^ Zhang, Jimmy (January 9, 2008). "Manipulate XML Content the Ximple Way". DevX. Retrieved 2020-07-24.
  4. ^ Zhang, Jimmy (June 24, 2008). "VTD-XML: XML Processing for the Future (Part II)". Code Project. Retrieved 2020-07-24.
  5. ^ Zhang, Jimmy (March 27, 2006). "Simplify XML processing with VTD-XML". JavaWorld. Retrieved 2020-07-24.
  6. ^ Zhang, Jimmy (October 21, 2004). "Better, Faster XML Processing with VTD-XML". DevX. Retrieved 2020-07-24.
  7. ^ Zhang, Jimmy (April 17, 2008). "VTD-XML: XML Processing for the Future (Part I)". Code Project. Retrieved 2020-07-24.
  8. ^ Zhang, Jimmy (November 2, 2007). "Index XML Documents with VTD-XML". SYS-CON Publications. Archived from the original on 2007-11-05.
  9. ^ Zhang, Jimmy (July 24, 2006). "Cut, paste, split, and assemble XML documents with VTD-XML". JavaWorld. Retrieved 2020-07-24.
  10. ^ 칩에 XML을 추가하시겠습니까?
  11. ^ Zhang, Jimmy (March 9, 2005). "XML on a Chip". XML.com. Retrieved 2020-07-24.
  12. ^ XimpleWare의 W3C 바이너리 XML 워크샵 포지션 페이퍼
  13. ^ Zhang, Jimmy (March 19, 2007). "Improve XPath Efficiency with VTD-XML". DevX. Retrieved 2020-07-24.
  14. ^ Volkman, Victor (December 3, 2007). "VTD-XML: A New Vision of XML". Developer.com. Retrieved 2020-07-24.
  15. ^ SourceForge의 가상 토큰 설명자 소개
  16. ^ Zhang, Jimmy (July 31, 2006). "The Performance Woe of Binary XML". SYS-CON Publications. Archived from the original on 2006-08-08.
  17. ^ VTD-XML 구문 분석/내비게이션 성능 보고서
  18. ^ Zhang, Jimmy (February 8, 2006). "A Step in the Right Direction: VTD-XML Improves XML Processing". DevX. Retrieved 2020-07-24.
  19. ^ Zhang, Jimmy (January 9, 2007). "Accelerate WSS applications with VTD-XML". JavaWorld. Retrieved 2020-07-24.
  20. ^ XML 보안에 대한 W3C 워크샵 프레젠테이션
  21. ^ XML 서명 및 XML 암호화를 위한 다음 단계에 대한 W3C 워크샵용 용지 배치
  22. ^ Zhang, Jimmy (September 10, 2007). "Schemaless Java-XML Data Binding with VTD-XML". ONJava. Archived from the original on 2017-09-27.