KR20050036973A - Xml 스트리밍 변환기 - Google Patents

Xml 스트리밍 변환기

Info

Publication number
KR20050036973A
KR20050036973A KR1020057002653A KR20057002653A KR20050036973A KR 20050036973 A KR20050036973 A KR 20050036973A KR 1020057002653 A KR1020057002653 A KR 1020057002653A KR 20057002653 A KR20057002653 A KR 20057002653A KR 20050036973 A KR20050036973 A KR 20050036973A
Authority
KR
South Korea
Prior art keywords
template
named
variables
events
responding
Prior art date
Application number
KR1020057002653A
Other languages
English (en)
Inventor
매튜 푸츠스
창기 주
Original Assignee
제이지알 어퀴지션 인코퍼레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 제이지알 어퀴지션 인코퍼레이티드 filed Critical 제이지알 어퀴지션 인코퍼레이티드
Publication of KR20050036973A publication Critical patent/KR20050036973A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/14Tree-structured documents
    • G06F40/143Markup, e.g. Standard Generalized Markup Language [SGML] or Document Type Definition [DTD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/80Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
    • G06F16/84Mapping; Conversion
    • G06F16/88Mark-up to mark-up conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/93Document management systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/149Adaptation of the text data for streaming purposes, e.g. Efficient XML Interchange [EXI] format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/151Transformation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/151Transformation
    • G06F40/154Tree transformation for tree-structured or markup documents, e.g. XSLT, XSL-FO or stylesheets
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/166Editing, e.g. inserting or deleting
    • G06F40/186Templates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/205Parsing
    • G06F40/221Parsing markup language streams
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/80Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
    • G06F16/84Mapping; Conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/958Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
    • G06F16/986Document structures and storage, e.g. HTML extensions
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99942Manipulating data structure, e.g. compression, compaction, compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Multimedia (AREA)
  • Business, Economics & Management (AREA)
  • General Business, Economics & Management (AREA)
  • Electromagnetism (AREA)
  • Toxicology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Document Processing Apparatus (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Abstract

본 발명은, 메모리 내에 도큐먼트를 나타내는 완전한 객체 트리를 형성하지 않으면서, 도큐먼트 변환을 특정하고 스트리밍 모드에서 도큐먼트를 변환하는 장치 및 방법에 관한 것이다. 본 발명의 특정한 양상들은 청구항, 상세한 설명 및 도면에서 설명된다.

Description

XML 스트리밍 변환기{XML STREAMING TRANSFORMER}
본 특허 문서의 개시의 일부는 저작권이 보호되는 내용을 포함한다. 저작권자는 특허 상표청의 특허 파일 또는 기록에서 볼 수 있는 바와 같이 누군가가 특허 문서 또는 특허 개시물을 팩스로 재현하는 것에 대해 이의가 없지만, 그렇지 않은 경우에는 무엇이든지 모든 저작권을 지정한다.
본 발명은, 구성될 모든 요소들 간의 계층적인 관계의 표현을 요구하고, 변환을 하기 위해 도큐먼트의 이러한 계층적인 객체 표현의 순회(traversal)를 필요로 하는 대신, 개별적인 프로세싱 이벤트들의 스트림으로서 처리되는 도큐먼트의 고정되고 매우 낮은 메모리 사용 변환을 위한 시스템 및 방법에 관한 것이다. 보다 구체적으로, 본 발명은 XML 도큐먼트들을 변환하기 위한 시스템 및 프로토콜에 관한 것이다.
기업간 전자상거래(B2B) 및 응용간(A2A) 전자 상거래가 전자 데이터 교환(EDI)을 위한 이전의 프로토콜들을 대신하고 있다. 기업이 B2B 및 A2A 시스템들을 이용하여 자신들의 효율성을 개선하고자 노력함에 따라, 호환성이 없는 많은 플랫폼(platform)들 및 경쟁 규격들이 출현하게 되었다. 확인되는 하나의 요구는 XML 도큐먼트들을 변환하는 것인바, 전형적으로 도큐먼트들을 한 시스템에서 다른 시스템으로 변환하는 것이다. 다른 변환 이유는 규격이 몇 개의 버전들을 겪어왔고, 한측은 보다 오래된 버전을 이용하고 다른측은 보다 새로운 버전을 이용할 수 있기 때문이다.
XML은 널리 이용되는 데이터 타입이 되었는데, 그 이유는 인라인 마크업을 생성하는 데에 적용되어야 하는 엄격한 룰들에 의해, 컴퓨터 프로그램이 텍스트 도큐먼트들의 내용을 해석하고 처리하는 것이 비교적 간단해지기 때문이다. 예를 들어, XML에 기록된 구매 주문은, 구매되고 있는 것을 묘사하는 마크업 주석들을 어떻게 읽는 지와 그리고 구매자가 누구인지 등을 알고 있는 주문 기입 소프트웨어 애플리케이션(order entry software application)에 의해 처리될 수 있다. 따라서, 세 번째 변환 이유는 구매 주문에 이러한 정보를 받아, 이를 구매자, 구매되고 있는 아이템들 및 제 1 도큐먼트로부터 카피되는 다른 정보를 포함하는 선적 계산서(Shipping Bill)와 같은 응답 도큐먼트를 만드는 데에 이용하기 위해서이다.
변환은 컴퓨터 프로세싱의 주요 카테고리이다. 대규모 시장에서, 사무를 집행하는 페이퍼리스 시스템은 하루에 수천개의 많은 XML 도큐먼트들의 변환을 필요로 할 수 있다. XML 도큐먼트들은 종종, 변환으로 처리되어야 하는 수천개의 많은 개별적인 데이터 요소들을 가지며 상당히 큰 사이즈를 갖는다. 입력으로부터 출력으로의 변환을 나타내는 룰들 또한 매우 광대할 수 있다. 개별적인 변환을 완료하는 데에 필요한 응답 시간이 과도하게 길어질 수 있고, 엔터프라이즈 스케일 변환 서비스를 지원하기 위해서는 컴퓨터 자원들에 대한 전체적인 요구가 허용할 수 없는 비율로 급격하게 커질 수 있다.
XML 변환을 수행할 수 있는 다른 많은 툴들이 있지만, 성능 문제를 해결하도록 효율적으로 설계된 툴은 없다. 오늘날 가장 대중적으로 이용되는 기술인 XSLT는 컴퓨터 자원들에 전형적으로 상당히 값이 비싼 내부 데이터 모델을 필요로 함으로써 성능 문제를 악화시킨다. XSLT 변환문(conversion statement)을 자바 등의 보다 효율적인 프로그래밍 랭귀지로 컴파일(compile)함으로써 또는 계획(scheme)들을 캐싱함으로써 이러한 문제들을 완화하기 위한 일부 시도들이 행해졌다. 하지만, 이러한 시도들은 비효율성을 야기시키는 기본적인 프로세스를 바꾸지 않는다.
따라서, XML 도큐먼트 변환들을 효율적으로 지정하고 실행하는 방법 및 구조가 필요하다.
도 1은 변환 프로세스의 하이 레벨 블록도이다.
도 2는 입력 이벤트들 및 종료 이벤트들의 개별적인 프로세싱을 도시하는 하이 레벨 블록도이다.
도 3은 XST 변환 엔진의 하이 레벨 블록도이다.
도 4 내지 도 6은 도 3에 나타낸 요소들의 부가적인 세부사항들을 제공한다.
도 7 내지 도 9는, 일 실시예에서, 이벤트 스트림의 이벤트들을 프로세스하기 위한 흐름도들이다.
도 10은 일 실시예에서 이용될 수 있는 스키마 보조 프레임워크(schema adjunct framework)에 대한 룩업의 프로세스하는 흐름도이다.
도 11 및 도 12는 서로 다른 SAX 분석기(parser)들을 이용하는 대안적인 구현들을 도시한다.
도 13은 템플릿(template) 프로세싱의 하이 레벨 블록도이다.
도 14는 템플릿 프로세싱 이후의 XML 인스턴스 프로세싱의 하이 레벨 블록도이다.
도 15A-C는 XST의 일 실시예의 스키마이다.
본 발명은, 구성될 모든 요소들 간의 계층적인 관계의 표현을 요구하고, 변환을 하기 위해 도큐먼트의 이러한 계층적인 객체 표현의 순회를 필요로 하는 대신, 개별적인 프로세싱 이벤트들의 스트림으로서 처리되는 도큐먼트의 고정되고 매우 낮은 메모리 사용 변환을 위한 시스템 및 방법에 관한 것이다. 본 발명의 특정한 양상들은 청구항, 상세한 설명 및 도면에서 설명된다.
하기의 상세한 설명은 도면들을 참조하여 이루어진다. 본 발명은 예시를 위해 바람직한 실시예들과 관련하여 설명되지만, 이러한 바람직한 실시예들이 본 발명의 범위를 제한하는 것은 아니며, 본 발명의 범위는 청구항들에 의해서만 규정된다. 당업자라면 하기의 상세한 설명에 대한 많은 동등한 변형들이 이루어질 수 있다는 것을 알 수 있을 것이다.
XST는 변환 기술이다. 변환은 변경(mutation)을 묘사하는 결정론적인 룰 세트를 이용하여 입력 소스를 출력으로 변경하는 것이다. 일 실시예에서, XST는 XML로 마크업되는 소스 데이터, 또는 유사하게 구성 및 태그되는 마크업 랭귀지에 대해 동작한다. XML 데이터는 XML의 구문론(syntax) 룰들을 따르는 인라인 마그업에 의해 주석이달려진다. XST 변환의 출력은 텍스트 데이터인데, 이 또한 XML 도큐먼트가 될 수 있다.
XST 변환은 템플릿에 포함된 룰들의 세트에 의해 묘사된다. 이러한 룰들은 랭귀지로 표현된다. 변환 랭귀지들은 범용 프로그래밍 랭귀지들을 닮았지만, 법적(legal) 입력들로부터 법적 출력들로 변경하는 데에 필요한 변경들의 묘사에 필요한 표현만을 제공한다. 법적 입력들이 XML 또는 유사하게 구성 및 태그되는 도큐먼트들로 제한되면, 일반적인 변환과 비교하여 문제가 많은 공간(problem space)이 상당히 제한된다. 따라서, 프로그래머들이 기록하기에 변환이 더 용이해지고, 템플릿들에 묘사된 변환을 계산하기 위한 프로세서의 실행이 보다 용이한 작업이 된다. 템플릿들은 변환 동작들이 일어나는 소스 도큐먼트의 순차 프로세싱에 있어서 상당한 입력 이벤트들을 정의한다. 일 실시예에서, 입력 이벤트 정의 및 관련된 변환 동작들은 서브 템플릿(subtemplate)들이라 부를 수 있다. 출력에 대한 스트리밍은 서브 템플릿 레벨에서 이루어진다. 다수의 예들이 따른다.
XML 변환의 제한된 범위에 의해서 조차도, 변환 랭귀지들에 대한 많은 다른 시도들을 고안할 수 있다. 가장 공통적인 타입의 랭귀지(XSLT가 좋은 예이다)는 XML 입력 도큐먼트가 노드들의 트리로서 처리되는 것이다. XML 도큐먼트들에 대해, 이는 일반적으로 직각적(intuitive)인 것으로 여겨지는 변환들을 묘사하고, 변환 프로그래머로 하여금 거의 모든 변환 프로세스를 비교적 용이하게 표현할 수 있게 하는 넓은 표현을 제공하는 방법을 제공한다. 이러한 타입의 랭귀지가 갖는 문제는, 기초적인 실행(underlying implementation)에 의해, 실제로 전체 XML 도큐먼트를 노드들의 트리로 변환시키고, 변환에 필요한 처리들을 트리 기반 노드 동작들로서 수행한다는 것이다. 특히 노드들 간에 많은 백트래킹(backtracking)이 필요한 경우, XML 도큐먼트에서 트리로의 변환은 비용이 많이 드는 동작이고, 트리 상에서의 이후의 동작들 또한 매우 비용이 많이 들 수 있다. 전형적으로, 전체 XML 도큐먼트는 메모리에서 트리로 변환되는바, 이러한 트리는 바이트 스트림으로서의 그 표현과 비교하여 도큐먼트 사이즈의 몇배를 차지한다. 물론, 트리를 저장하는 데에 필요한 메모리의 양을 줄이기 위한 다양한 최적화들이 가능하기는 하지만, 이들은 실행하는 것이 상당히 어렵다. 그리고, 이러한 최적화들은 보다 우수한 메모리 이용과 보다 느린 성능 간의 타협을 필요로 한다. 이들 및 다른 이유들로 인해, 트리 지향 타입의 변환 랭귀지의 기초적인 실행은 트리 표현 또는 트리 사이즈의 영역(area)에서 최적화되지 않는다.
XST 변환 랭귀지는 변환 프로세스의 보다 효율적인 기초적 실행을 가능하게 하기 위해 계획적으로 제한된다. 기존의 수백개의 변환들을 조사하는 동안, 이들 대부분은 완전한 트리 기반 랭귀지의 표현을 필요로 하지 않는 다는 것에 주목하였다. XML 도큐먼트의 특정 프래그먼트들에 대해, XST는 그의 기본적인 디폴트 프로세싱에 대해 보다 단순한 패러다임(paradigm)을 이용하고, 더 많은 복소수(complex)를 이용하고, 그리고 이들이 요구되는 경우에만 비싼 비용으로 구성한다. XST 시도는 또한, 특정한 변환 클래스들에 대해, 템플릿들은 기록하기가 어려울 수 있고 성능이 트리 기반 랭귀지들에 대해서 보다 나을 것이 없다고 믿고 있다. 따라서, XST는 더 많이 제한된 이디엄(idiom)으로 쉽게 표현될 수 있는 큰 클래스의 변환들에 대해 높은 성능을 제공할 수 있다.
XML 입력 스트림을 처리하기 위해서는, 이 스트림을 스캔하여 인라인 마크업 및 이 인라인 마크업에 의해 주석이 달려지는 콘텐츠를 인식한다. 이러한 마그업 및 그 콘텐츠의 인식은 소위 "이벤트들"을 생성하며, 이러한 프로세스는 종종 "이벤트 스트림 분석(event-stream parsing)"이라 불린다. 이러한 이벤트들로부터 콘텐츠 아이템들 간의 계층적인 관계들을 캡춰하는 노드들의 트리를 형성하기 위해서는, 더 복잡한 부가적인 프로세서가 필요하다. 강제적인 환경에서, XST는 심지어 XML 도큐먼트를 통한 단일 패스 동안, 노드들의 트리를 형성하는 이벤트 스트림을 처리할 수 있다. 단일 패스의 비 트리(non-tree) 프로세싱은 비교적 작은 버퍼들을 이용함으로써, 메모리 사용을 매우 작게 유지할 수 있다. 작은 버퍼들에도 불구하고, 프로세싱 시간은 더 빨라질 수 있는데, 그 이유는 트리를 구성하거나 또는 변환을 프로세스하기 위해 트리를 통해 다수의 패스들을 행하는 데에 시간이 소모되지 않기 때문이다.
XML 도큐먼트 변환에 이벤트 스트림 분석을 적용하는 것은 혁신적인 것이다. XST 랭귀지는 효율적인 이벤트 스트림 분석 방법을 이용하여 대부분의 변환 프로세싱을 실행할 수 있도록 신중하게 설계된다. XST의 몇몇 양상들은 변환 문제들의 큰 클래스까지 이벤트 스트림 분석을 확장한다. 이전 이벤트들로부터 기준 정보(reference information)를 전송하고 콘텍스트 특정 값들을 계산하기 위해, 이벤트 스트림 프로세싱에는 가변 변수들이 이용될 수 있다. 출력 스트림의 일부는 분할되어 다수의 출력 타겟들로 향할 수 있다. 자바 방법들 및 다른 외부 프로세싱 루틴들이 이벤트들로부터 호출될 수 있다. 어떠한 실시예들에서, XST는 도큐먼트의 프래그먼트들 또는 서브 섹션들 상에서 트리들이 구성될 수 있게 함으로써, 트리 기반 노드 프로세싱이 이벤트 스트림 프로세스에 혼합될 수 있는 가능성을 허용한다. XST는 또한, 메인 XST 변환 이벤트 핸들러 이전 및 이후에, 부가적인 이벤트 핸들러들이 함께 체인(chain)을 형성하는 것을 허용한다.
도 1은 이벤트 프로세싱의 하이 레벨 블록도이다. 여기에 도시된 이벤트 프로세싱은 전자 상거래 도큐먼트, 바람직하게는 XML로 표현되는 것(하지만, 보다 일반적으로는, 어떠한 도큐먼트의 논리 구조에 따라 저장 유닛들의 세트들을 식별하는 캐릭터 데이터 엔코딩 텍스트 캐릭터들 및 마크업 데이터로 이루어지는 도큐먼트들을 포함한다)을 변환하는 네임드(named) 템플릿 요소들에 대해 동작한다. 다양한 결합들로 이용될 수 있는 많은 옵션들이 하기에 도시되거나 설명된다. 분석기는 전자상거래 소스에 대응하는 이벤트 스트림(101)을 발생시키는바, 이는 데이터 파일 또는 어떠한 블로브(blob) 또는 스트림이 될 수 있다. 컴퓨터 시스템 상에 호스트되는 소프트웨어는 전자 도큐먼트 소스에 대응하는 분석기에 의해 발생되는 이벤트들(102)을 수신한다. 어떠한 실시예들에서, 이벤트들은 요소 시작 이벤트들(103), 입력 이벤트들 및 요소 종료 이벤트들(105)을 포함한다. 다른 실시예들에서, 분석기는 토큰들을 패스시킬 수 있고, 시스템은 이러한 토큰들로부터 이벤트들을 발생시킬 수 있다. 또 다른 실시예들에서는, 캐릭터 스트림을 수신하여 분석함으로써, 토큰들 또는 이벤트들을 발생시킬 수 있다. 요소 시작 이벤트(103)에 응하여, 컴퓨터 지원 시스템(computer-assisted system)은 요소를 네임드 템플릿(104)에 매치시킨다. 이는 요소 시작 이벤트의 일부로서 패스되는 요소 네임을 요소 템플릿의 대응하는 네임과 매치시킴으로써 이루어질 수 있다. 다른 도면들에 도시되는 다수의 템플릿 인스턴스들이 메모리의 트리에 저장될 수 있다. 대안적으로, 이러한 템플릿 인스턴스들은, 이를 테면 XML에 대한 간단한 API (SAX)에 의해 액세스가능한 것 등의 다른 데이터 구조로 저장될 수 있다. 어떠한 실시예들에서, 다수의 템플릿 인스턴스들은 템플릿 소스에 함께 저장된다. 매치하는 것이 없으면, 시작 이벤트에 의해 표현되는 요소는 그의 부모 요소의 콘텐츠로서 처리된다. XST 변환은 전자 상거래 도큐먼트의 루트 요소를 매치시키는 템플릿 요소를 포함해야 한다. 이러한 제약에 의해, 매칭하는 템플릿이 없는 자식 요소는 그의 부모 요소의 콘텐츠로서 처리될 수 있다. 요소의 콘텐츠는 요소 시작 이벤트를 일으키는 토큰(들)과 요소 종료 이벤트를 일으키는 토큰(들) 간에 나타나는 모든 것을 포함할 수 있다. 콘텐츠는 내포된(nested) 서브 요소들을 포함하거나 또는 포함하지 않을 수 있다. 콘텐츠는, 이를 테면 XML 형성되는 요소의 속성들과 같은, 요소의 속성들을 포함하거나 또는 포함하지 않을 수 있다. 요소 시작 이벤트에 의해 표현되는 요소와 템플릿 소스로부터의 네임드 템플릿 또는 서브 템플릿 간에 매치가 이루어지는 경우, 시스템은 네임드 템플릿을 활성화시킨다. 프로세싱이 요소 종료 이벤트(105)에 이르면, 시스템은 요소를 활성화된 대응 네임드 템플릿과 매치시키고자 한다. 대응하는 요소 시작 이벤트가 네임드 요소와 매치하지 않는 경우, 이러한 시도는 실패한다. 활성화된 대응 네임드 템플릿과 매치하는 경우, 프로세싱이 수행된다(106). 프로세싱은 템플릿으로부터의 문자 텍스트 및 스트림으로부터의 입력 이벤트들 모두의 출력을 포함할 수 있다. 활성화된 네임드 템플릿의 명령들에 응답하여, 시스템은 현재 요소에 대응하는 입력 이벤트들로부터의 문자 텍스트 또는 콘텐츠를 출력한다. 현재 요소의 콘텐츠를 프로세싱한 후, 시스템은, 이를 테면 입력 버퍼로부터의 입력 이벤트들을 클리어(clear)할 수 있다. 활성화된 네임드 템플릿은 비활성화될 수 있다.
본 실시예는 템플릿들과 함께 가변 변수들을 이용함으로써 개선될 수 있다. 이러한 변수들은 도큐먼트의 프로세싱을 위해 활성화되거나, 또는 (어떠한 내포된 네임드 템플릿들을 포함하는) 네임드 템플릿의 프로세싱으로 범위가 제한될 수 있다. 요소 시작 이벤트에 대한 응답은 1개 또는 그 이상의 변수들의 활성화를 포함할 수 있고, 대응하는 종료 이벤트에 대한 응답은 변수들의 비활성화를 포함할 수 있다. 입력 스트림 값들은 가변 변수들 또는 비 네임드(un-named) 또는 불변(non-mutable) 변수들에 할당될 수 있다. 가변 변수들은 서브스트링, 접합(concatenation) 또는 다른 연산자들을 이용하여 변경될 수 있다. 종료 이벤트 및 대응하는 템플릿의 프로세싱은 변수들의 조작(manipulating)을 포함할 수 있다. 변수들은 자바 방법 등의 외부 프로세싱 루틴들에 의해 조작될 수 있다.
본 실시예는 템플릿에 제어 연산자들의 흐름을 이용함으로써 개선될 수 있다. 이러한 제어 연산자들의 흐름은 "if" 및 "choose"와 같이 단순하다. 이들은 또한 "for-each", "when" 및 "otherwise" 연산자들을 포함할 수 있다. 또한, "else" 및 "then-else" 등의 구조들이 이용될 수 있다. 제어 연산자들의 일부 흐름은 트리 구조로 변환되는 입력 도큐먼트의 프래그먼트 또는 서브 섹션에 대해 동작한다.
도 2는 이벤트 프로세싱의 대안적인 하이 레벨 블록도이다. 이러한 이벤트 프로세싱 또한 네임드 템플릿 요소들에 대해 동작한다. 이벤트 스트림(101)은 시스템으로부터 떨어져있는 분석기에 의해 또는 시스템의 구성요소에 의해 발생된다. 프로세싱 모듈은 이벤트 스트림을 수신한다(102). 이는 상기 설명한 바와 같이 요소 시작 이벤트들(103)을 매치시킨다(104). 매치에 응답하여, 시스템은 요소에 대응하는 콘텐츠, 속성들 또는 라벨들을 저장하기 위해 1개 또는 그 이상의 변수들을 설정할 수 있다. 템플릿 요소들의 구조에 의존하여, 변수들은 로컬 범위 또는 글로벌 범위를 갖는다. 변수들이 로컬 범위를 가질 때, 이들은 대응하는 네임드 템플릿이 액티브 상태인한 액티브하다. 변수들이 글로벌 범위를 가질 때, 이들은 도큐먼트 변환 내내 액티브하다. 시스템은 일반적으로 상기 설명한 출력 프로세스(106)에 의해 종료 이벤트들(105)을 프로세스한다. 템플릿으로부터의 문자 텍스트 및 스트림으로부터의 입력 이벤트들의 프로세싱에 부가하여, 프로세싱은 또한, 변수들로의 입력 스트림의 부분들의 할당 및 변수들에 대한 논리 연산, 스트링 연산, 산술 연산 또는 기타 연산의 수행을 비롯한, 변수들의 조작을 포함할 수 있다. 조작되거나 또는 조작되지 않은 변수들의 콘텐츠가 출력될 수 있다. 프로세싱은 또한 상기 설명한 제어 명령들의 흐름 및 외부 프로세스들의 호출을 포함할 수 있다. 이러한 외부 프로세스는 자바 클래스들 및 방법들을 포함할 수 있는바, 이들에 대해서는 하기에서 설명한다.
제 1 실시예에서, XST 템플릿 랭귀지는 다음의 3개의 프로세싱 커맨드들을 지원한다. <xst:template>은 XST 템플릿의 오프닝 태그로서, 1개의 파일에 1개 이상의 템플릿을 저장하는 데에 이용된다. <xst:pi>는 XST 프로세싱 명령들의 오프닝 태그이다. <xst:var>는 XST 변수의 오프닝 태그이다.
대안적인 실시예에서, 프로세싱 커맨드들은 템플릿의 속성들로서 처리되고, "템플릿들" 마크업은 "템플릿" 마크업의 다수의 인스턴스들에 대한 부모로서 제공된다.
XST 템플릿은 스트링 문자들 및 템플릿 변수들을 포함하는 텍스트 파일이다. 변수들은 "<xst:var>"의 오프닝 태그 및 "</xst:var>"의 클로징 태그를 갖는 <xst:var>variableName</xst:var>의 형태를 갖는다. 변수들은 템플릿과 그의 대응하는 소스 XML 도큐먼트 간의 바인딩(binding)을 제공한다.
변환은 XML 도큐먼트의 분석으로부터 시작된다. XML 도큐먼트들은 루트 요소를 갖기 때문에, XST 변환들은 루트 템플릿을 갖는다. 요소의 네임이 루트이면, 템플릿은 루트 요소의 네임과 확장자(extension), ".tpl"을 결합하는 named root.tpl이 될 수 있는바, 여기서 루트는 어떠한 임의의 요소 네임이다. 자식 템플릿은 XML 도큐먼트의 그의 부모 요소를 통해 부모 템플릿에 소속(attach)될 수 있다.
대안적인 실시예들에서, XST 변환 엔진은 스트리밍 모드 또는 버퍼 모드에서 동작할 수 있다. 템플릿과 같은, 변환의 중간 출력은 스트링 문자들 및 템플릿 변수들을 포함한다. 스트리밍 모드에서, 각 템플릿의 전달되는 출력은 템플릿의 비활성화 또는 언로딩시에 스트리밍된다. 버퍼 모드에서는, 변환의 종료시 또는 부모 템플릿의 비활성화까지, 변환의 결과들이 출력되고 중간 저장소(storage)는 플러시 아웃된다. 각 템플릿 내에서, 출력의 요소들의 배열은 입력 도큐먼트의 것과 다를 수 있다.
설계에 의해, XST 변환은 로드된 템플릿들을 재사용한다. 일 구현에서, XML 도큐먼트에 대해 로드된 템플릿들의 리스트는 그 도큐먼트의 루트 템플릿의 네임하에 저장된다. 모든 리스트들은 고속 액세스를 위해 메모리에 저장된다. 메모리의 이용을 최소화하기 위해, 실제로, 엔진은 변환된 결과들을 타겟 출력 스트림에 기록한다.
XML 도큐먼트에 대응하는 XST 변환은 XML 도큐먼트의 요소들에 대응하는 1개 또는 그 이상의 템플릿들을 포함한다. 다수의 템플릿들이 단일 파일에 저장될 수 있다. XML 도큐먼트의 요소의 네임과 템플릿의 네임을 간단하게 스트링 비교하여, 변환 동안 활성화 또는 로드되어야 하는 매칭하는 템플릿이 존재하는 지의 여부를 결정한다. 템플릿 네임들은 네임스페이스 네임에 의해 자격이 부여(qualification)된다.
XST 변환 엔진은 디폴트 XML 분석기/판독기 또는 사용자가 선택하는 것을 이용하여 XML 도큐먼트를 변환하기 위해 공개 인터페이스(public interface)들을 제공한다. 이는 또한 XML 분석을 위한 자바 API (JAXP) 인터페이스를 지원한다. 이 엔진은 독립형 서비스 또는 다른 서비스들의 일부로서 실행된다.
도 3에 나타낸 바와 같이, XST 변환 엔진(302)의 제 1 실시예는 템플릿 변환기(303), 소스 도큐먼트 핸들러(305) 및 템플릿 프로세서(306) 모듈들을 포함한다. 템플릿 변환기(303)는 XST를 이용하여 XML 도큐먼트를 변환하기 위해 공개 인터페이스를 제공한다. 소스 도큐먼트 핸들러(305)는 XML 판독기/분석기(301)로부터 다양한 SAX 이벤트들을 수신한 다음 이들을 템플릿 프로세서(306)에 전달하는 콘텐츠 핸들러로서 등록된다. 이 템플릿 프로세서(306)는 XML 분석기(301)로부터의 SAX 이벤트들을 처리한다. 이는 또한 스키마 보조 프레임워크(SAF)(307)에 특정된 룰들을 이용하여 로드된 템플릿을 캐시/재이용하고 요소의 값을 룩업하는 메커니즘을 제공한다.
도 4에 나타낸 바와 같이, 템플릿 변환기(402)는 (1) 디폴트 XML 판독기/분석기 또는 사용자가 선택한 것을 이용하여 XML 도큐먼트를 변환하고, (2) SAX 이벤트들을 처리하기 위해 다른 XML 변환기들/어댑터들과 함께 이용될 수 있는 콘텐츠 핸들러를 얻고, (3) 출력 스트림을 세트시키고, 그리고 (4) 변환의 출력 도큐먼트를 얻기 위한 공개 인터페이스들(401, 403)을 제공한다.
도 5에 나타낸 바와 같이, 도큐먼트 핸들러(502)는 (1) 출력 도큐먼트를 얻고, (2) 출력 타겟 스트림을 세트시키고, (3) 스택 상에서 현재 이용되는 템플릿들의 리스트를 얻고, (4) 스택 상에 이용하기 위한 템플릿들의 리스트를 배치(put)하기 위한 공개 인터페이스(503)를 제공한다. 이는 또한, 그 템플릿 프로세서에게 단순히 이벤트들을 전달하는 SAX 이벤트 핸들러(501)의 인터페이스들을 제공한다.
도 6에 나타낸 바와 같이, 도큐먼트 핸들러(502)에 의해 제공되는 set/get 인터페이스들에 부가하여, 템플릿 프로세서(602)는 또한 SAF(307)를 이용하여 특성을 룩업하기 위한 getProperty() 방법(603)을 제공한다. SAX 이벤트 핸들러(601)의 5개의 인터페이스들이 XST 변환(603)을 위해 제공된다. Handler startDocument()는 reset() 방법을 호출하여, 템플릿 프로세서의 일부 인스턴스 변수들의 상태들을 리셋시킨다. Handler endDocument가 예약(reserve)된다. 도 7 내지 도 9는 각각, SAX 프로세서에 의해 발생되고 SAX 이벤트 핸들러들에 의해 처리되는 startElement, 캐릭터 또는 입력, 및 endElement 이벤트를 나타낸다.
도 7은 startElement 모듈 내에서의 흐름을 나타낸다. 본 실시예에서, startElement 모듈은, 도큐먼트 타입 정의(DTD), 감소된 XML 데이터(XDR), XML을 위한 도큐먼트 콘텐츠 묘사(DCD), 객체 지향 XML을 위한 스키마(SOX), 도큐먼트 정의 마크업 랭귀지(DDML), XML 스키마, XML을 위한 표준 랭귀지 정의(RELAX/Core/NG), XML을 위한 3개의 표준 표현들(TREX) 또는 스키매트론(Schematron)을 따르는 데이터 타입들 등의 추상 데이터 타입(abstract data type)을 나타낼 수 있는 파라미터들과 함께 호출된다. 단계(702)에서는, 입력을 테스트하여 스키마 및 템플릿을 로드시킬 것인 지의 여부를 결정한다. 단계(705)는 스키마 및 템플릿을 얻는 것을 포함한다. 특정한 추상 데이터 타입에 대해, 추상 트리가 생성되어 질문(query)될 수 있다. 단계(706)의 논리 분기는 루트 템플릿이 초기화되었는 지의 여부에 의존한다. 초기화되었다면, 오픈된 템플릿은 단계(708)에서 그의 부모 템플릿에 소속된다. 초기화되지 않았다면, 개방된 템플릿은 루트 템플릿이 되고, 단계(707)에서 플래그가 세트된다. 단계(709)에서는, 새롭게 활성화된 템플릿이 템플릿 스택 상에 푸쉬된다. 단계들(709 또는 703)로부터 도달하는 단계(710)에서는, 요소의 속성들이 프로세싱된다. XML을 이용하여 요소를 엔코드할 때, 속성들은 XML 속성들이다. 속성 프로세싱이 완료되면, 루틴은 리턴된다. 단계(702)에서 다시 한번, 프로세싱되고 있는 요소가 네임드 템플릿과 대응하지 않으면, 다음 결정 분기(703)는 가장 최근에 활성화된 템플릿이 대응하는 요소의 콘텐츠들을 카피하도록 세트되는 지의 여부를 결정한다. 이 시점에서, 서브 요소는 그 부모 요소의 콘텐츠로서 처리된다. 카피가 세트되었으면, 단계(712)에서 리턴되기 전에, 프로세싱은 카피를 셋업하는 단계(704) 및 startElement 방법이 호출될 때 전달되는 속성들을 카피하는 단계(711)로 진행된다. 템플릿이 콘텐츠들을 카피하도록 세트되지 않았다면, 현재 요소에 대응하는 입력 스트림은 출력하도록 카피되지 않는다. 703 내지 712로부터, 방법은 리턴된다.
도 8은 입력 스트림(801)을 프로세싱하는 모듈 내에서의 흐름을 도시한다. 본 실시예에서, 제 1 논리 분기(802)는 lookup() 방법을 이용하여, 스키마 보조 프레임워크가 이러한 입력 스트림을 프로세싱하는 데에 적용되는 지의 여부를 결정한다. 적용가능한 스키마 보조 프레임워크이어야 하고, 액세스가능해야 한다( 널). 스키마 보조 프레임워크가 적용가능하고 이용가능하다면, 이는 단계(803)에서 적용된다. 다음 프로세싱 분기는 현재 요소와 동일한 네임을 갖는 변수가 존재하는 지의 여부를 결정한다. 현재 요소에 대한 변수가 존재한다면, 단계(808)에서 리턴되기 전에, setVariable 방법(806)이 호출되어, 입력 스트림의 모두 또는 일부를 변수에 전사(transfer)시킨다. 현재 요소에 대한 어떠한 변수도 존재하지 않으면, 논리 분기(805)는 카피 명령 또는 속성들이 호출되었는 지의 여부를 결정한다. 그렇다면, copy() 방법(807)이 호출된다. 그렇지 않거나, 또는 카피된 이후, 방법은 단계(808)에서 리턴된다. 최소한의 변경에 의해, 임시로 버퍼된 입력 이벤트 스트림의 프로세싱은 요소 종료 이벤트까지 연기될 수 있다.
도 9는 종료 요소 이벤트(901)를 프로세싱하는 모듈 내에서의 흐름을 나타낸다. 제 1 논리 분기(902)는 현재 액티브한 템플릿을 종료되고 있는 요소에 매치시킨다. 이는, 현재 테플릿의 네임의 부분과 방법에 대한 파라미터로서 전달되는 네임을 매치시킴으로써 이루어질 수 있다. 흐름도에서, 도시된 시도는, 어떠한 선택된 확장자가 이용되더라도, 요소의 네임에 대해 확장자 ".TPL"을 접합시키고 현재 템플릿에 대해 매치시키는 것이다. 전진에 기초하여 입력 이벤트들을 프로세싱하는 실시예들에서, 매치가 없으면 방법은 단계(906)에서 리턴된다. 일시적으로 버퍼된 입력 이벤트들의 프로세싱을 요소 종료 이벤트까지 연기하는 실시예들에서는, 요소 종료 이벤트들에 대해 어떠한 매치도 없다고 할지라도, 이를 테면 요소의 부분적인 콘텐츠들을 카피하는 등의 어떠한 프로세싱이 수행될 수 있다. 매치하는 경우, 스택 상에 템플릿들을 저장하는 실시예들에서, 현재 템플릿은 프로세싱을 위해 스택에서 팝오프(pop off)된다(903). 다음 논리 분기(904)는 카피 명령 또는 속성이 유효한 지의 여부를 결정한다. 유효하다면, 버퍼는 출력 및 플러시될 수 있다(905). 이후, 프로세싱은 경우(904 또는 905)중 어느 하나로 계속되고, 방법은 906에서 리턴된다.
도 10은 스키마 보조 프레임워크를 이용하는 XST의 제 1 실시예에서의 프로세스 흐름의 블록도이다. 본 XST의 실시예에는 일반적인 스키마 보조 프레임워크가 포함되어, 사용자로 하여금 변환될 XML 도큐먼트의 구조들 또는 특성들에 관한 부가적인 정보를 특정할 수 있게 한다. 스키마 보조는 특정한 스키마에 대한 부가적인 애플리케이션 특정의 또는 도메인 특정의 데이터를 포함하는 XML 도큐먼트이다. SAF 기술에 관한 부가적인 정보는 Vorthmann, S. 등의 "The Schema Adjunct Framework," www.Extensibility.com/resources/saf_dec2000.htm에서 개시되어 있다.
템플릿 프로세서(1001)는, 일반적으로 도 8의 lookup() 방법(803)에 대응하는, 이벤트 스트림의 특정한 이벤트들을 처리한다. 특정한 요소에 대해, 논리 분기(1002)는 SAF 룩업이 요구되는 지의 여부를 결정한다. 요구되지 않으면, 방법은 1008에서 리턴된다. 요구되면, 다음 논리 분기(1003)는 요구되는 SAF가 액세스가 가능한지의 여부를 결정한다. 액세스가 가능하지 않으면, 방법은 1008에서 리턴된다. 일 실시예에서, 스키마 보조 프레임워크는 자바 애플리케이션을 호출한다. 템플릿 프로세서는 클래스 네임 및 방법 네임을 얻은 다음(1004), 클래스 인스턴스 및 클래스 방법을 얻는다(1005). 클래스 방법이 널이 아니면(1006), 이는 1007에서 호출된다. 클래스 방법의 호출은 XST 외부의 서비스의 호출을 포함할 수 있다. 클래스 방법이 호출되고 리턴된 후, 템플릿 프로세서는 1008에서 리턴된다.
하기의 예는 XML 도큐먼트의 요소 <RefDate>의 콘텐츠에 대한 현재 날짜 및 시간을 제공하기 위해 SAF를 이용하는 것에 대해 설명한다. 이러한 확장에 대해서는 자바 클래스가 이용된다.
상기 예에서, 요소 <param-list>의 콘텐츠는 XST에 의해 해시표 객체(hashtable object)에 저장될 리프(leaf) 요소들의 리스트를 특정하고; RefDate는 소스 XML 도큐먼트의 요소의 네임과 일치하고; test.xst.templates.InfoRetriever는 스키마 보조 확장자를 제공하기 위한 자바 클래스의 네임이고; 그리고 getDateTime은 호출될 이러한 클래스의 방법의 네임이다. <param-list>에 의해, SA 확장은 소스 XML 도큐먼트로부터, XST에 의해 프로세싱된 요소들을 액세스할 수 있다.
요소 <RefDate>에 대한 갱신된 정보를 제공하는 데에 이용되는, 자바 클래스에 대한 샘플 코드는 다음과 같다.
SAF 확장을 제공하는 방법은 상기 샘플 코드에 나타낸 바와 같이 4개의 인수(argument)들을 가질 수 있는바, 여기서 localName 및 value는, 변환 동안, 최초 XML도큐먼트의 요소의 네임 및 값에 대응하고, ht는 SAF 도큐먼트 내의 요소 <param-list>의 콘텐츠에 의해 특정되는 리프 요소들의 리스트를 저장하기 위한 해시표이고; 그리고 이벤트는 그 방법이 호출될 때의 SAX 이벤트의 네임이다. 주목할 사항으로서, 이러한 방법에 패스되는 인수들은 샘플 코드에서는 이용되지 않는다. 룩업이 인에이블되면, 상기 방법은 XST에 의해 호출되어, 변환하에서 요소 <RefDate>에 대한 부가적인 정보를 제공한다.
다음 예는 샘플 소스 도큐먼트, ChangeOrder.xml을 나타내는바, 이는 그 내에 요소 <RefDate>를 갖는다.
SAF 확장 프로세싱의 대부분의 논리에 대해서는, 간단한 템플릿을 이용하여 ChangeOrder 요소를 변환한다:
상기 나타낸 자바 클래스 및 SAF 도큐먼트를 갖는 이러한 템플릿을 이용하여, 그리고 2001년 9월 21일 15:27:17에 XST를 실행하게 되면, 변환되는 문서의 결과는 다음과 같다:
이러한 변환된 도큐먼트에서, 요소 <RefDate>는 자바 SA 확장에 의해 제공되는 갱신된 날짜/시간을 갖는다.
다음 예는 XML 도큐먼트의 "address1" 필드에 부가 정보를 제공하기 위해 SAF를 이용하는 방법을 나타낸다. 이러한 확장에 대해서는 자바 클래스가 이용된다.
여기서, "address1"은 변환/변경될 최초 XML 도큐먼트 내의 필드이고; "test.xst.templates.AddressRetriever"는 자바 클래스의 네임이고; "getAdditionalAddresslnfo"는 호출될 이러한 클래스의 방법의 것이고, "replace"는 리턴된 값에 대한 동작 모드이다. 이용되는 자바 클래스에 대한 샘플 코드는 다음과 같다.
이 방법의 시그너쳐(signature)는 3개의 인수들, "String localName", "String value" 및 "Hashtableparams"을 갖는바, 여기서 "localName" 및 "value"는 변환하에서 최초 XML 도큐먼트의 필드의 네임 및 값에 대응하고, "Hashtableparams"는 스키마 보조 도큐먼트에 특정되는 네임들 및 XML 도큐먼트에서의 이들의 이용가능한 값들의 리스트를 저장하기 위한 "hashtable"이다. 룩업이 인에이블되면, 상기 방법은 XST에 의해 호출되어, 변환하에서의 XML 도큐먼트에 대한 부가 정보를 제공할 것이다.
XST 변환 엔진은 Xerces와 같은 디폴트 XML 분석기, 또는 사용자가 선택한 분석기를 이용하여 XML 도큐먼트를 변환하기 위한 인터페이스들을 제공한다. 도 11 및 도 12에서는, 2개의 대안적인 분석기들을 함께 이용하여 이벤트 스트림들을 발생시킨다. 본 실시예에 도시한 특정한 분석기들은 XML 분석기들이다. 분석기들은 디폴트 커머스 원 XML 분석기(default Commerce One XML parser)(1101) 및 Xerces/Xalan 분석기(1201)이다. 이러한 분석기들을 호출하기 위한 샘플 구문론 및 의미론을 설명한다. 어느 경우이든, 분석기의 출력은 XST 변환 엔진(1102)에 입력된다. XST 변환 엔진은 템플릿 변환기(1103), 소스 도큐먼트 핸들러(1104) 및 템플릿 프로세서(1105)를 포함한다. 이러한 구성 요소들 간의 상호 작용에 대한 보다 상세한 사항은, 템플릿 소스 및 도큐먼트 소스에 대해, 도 13 및 도 14에서 설명된다.
제 2 실시예에서, 하이 레벨 설계는 부가적인 특징들을 지원한다. XSLT 스타일시트(stylesheet)의 것과 유사한 구문론을 갖는 XST 템플릿들이 이용된다. 변환에 이용되는 모든 템플릿들은 하나의 템플릿 소스에 상주하거나, 또는 템플릿 소스에 기준(reference)에 의해 포함된다. 공개 인터페이스 또는 API를 통해 부가적인 템플릿들이 부가될 수 있다. 소스 도큐먼트의 프래그먼트들 또는 서브 섹션들은 XPath 표현들 또는 트리 조작들을 이용하여 액세스할 수 있는 트리 구조에 의해 표현될 수 있다. XST 템플릿들에서는 if, choose, when 및 otherwise의 논리 연산들이 지원된다. 스트링, 서브 스트링, 접합 기능에 대해서는 빌트인 기능들이 제공된다. 자바 확장 기능 핸들러가 설치되어, 사용자가 정의하는 확장 기능들을 처리할 수 있다. 이 핸들러는 그 클래스 경로 및 방법 네임 모두를 특정함으로써 자바 방법의 호출을 지원한다. 입력 스트림으로부터의 값들을 받아들이는 변수들은 변환 동안 변하기 쉽다. 대안적인 실시예들에서는, 제 1, 2 실시예들의 특징들이 혼합되고 매치될 수 있다.
도 13 및 도 14에 도시된 바와 같이, 제 2 실시예의 하이 레벨 아키텍쳐는 제 1 실시예를 닮았다. 도 13은 XST 템플릿 소스를 분석하기 위한 프로세스 흐름을 나타낸다. 도 14는 XML 인스턴스를 변환하기 위한 프로세스 흐름을 나타낸다. 도면들에서, 변환기 모듈(1303)은 커머스 원의 CXPParser 또는 Xerces 분석기 등의 XML 분석기(1304)와 함께 XST를 이용하는 편리한 방법을 제공한다. 이는 또한 이용되는 템플릿들의 리스트 및 콘텐츠 핸들러의 새로운 인스턴스를 얻기 위한 인터페이스들을 제공한다. 핸들러 모듈(1305)은 템플릿 및 소스 도큐먼트(1301) 모두에 대한 콘텐츠 핸들러들을 제공한다. 이러한 핸들러들은 어떠한 XML 분석기들, 바람직하게는 W3C 규격을 따르는 분석기들과 함께 이용될 수 있다. 핸들러들은 SAX 분석 이벤트들을 추가적인 프로세싱을 위해 XST 프로세서(1306)에 전송한다. 프로세서 모듈(1306)은 XST 템플릿들(1301)을 DOM 요소들(1407)의 트리 내로 프로세싱하는 템플릿 프로세서 및 템플릿 요소들의 리스트(1408)를 이용하여 XML 인스턴스(1401)를 변환하는 소스 도큐먼트 프로세서를 제공한다. XST 템플릿(1401)은 변환을 위한 룰들을 제공하는 유효한 XML 도큐먼트이다. 템플릿 모듈은 템플릿 내의 요소들 각각에 대한 클래스들을 포함한다. 이는 또한 템플릿을 스트림 및 클론(clone)하는 메커니즘을 제공한다. 도면들에는 도시되지 않은 모듈 Xpath는 XPath 엔진에 의해 구현되는 XPath 표현들을 이용 및 실행하기 위한 어댑터 클래스들을 제공한다.
제 1 실시예와 관련하여, 도큐먼트 핸들러(1305)에 대한 공개 인터페이스는 몇 개의 방법 호출을 제공한다. getOutputDocument 방법은 공개 XSTtemplate getOutputDocument()로서 표명(declare)될 수 있다. 이 방법은 변환에 이용되는 현재의 루트 템플릿을 리턴시킨다. getOutputStream 방법은 공개 java.io.OutputStream getOutputStream()으로 표명될 수 있다. 이 방법은 이러한 변환에 이용되는 타겟 출력 스트림을 리턴시킨다. getContentHandler 방법은 공개 org.xml.sax.ContentHandlergetContentHandler()로서 표명될 수 있다. 이 방법은 이러한 핸들러의 ContentHandler를 리턴시킨다. getTemplates 방법은 공개 java.util.Hashtable gettemplates()로서 표명될 수 있다. 이 방법은 현재 템플릿 리스트를 얻는다. putTemplates 방법은 공개 void putTemplates(java.util.HashtabletemplList)로서 표명될 수 있다. 이 방법은 현재 또는 액티브한 템플릿 리스트에 템플릿의 리스트를 배치(put)한다. SetOutputStream 방법은 공개 void setOutputStream(java.io.OutputStream os)로서 표명될 수 있다. 이 방법은 이러한 변환에 대한 출력 스트림을 세트시킨다. setSiblingContentHandler 방법은 공개 void setSiblingContentHandler(org.xml.sax.ContentHandler handler)로서 표명될 수 있다. 이 방법은 시블링 리스트(sibling list)의 끝에 시블링 핸들러를 배치한다.
DocumentProcessor에 대한 공개 인터페이스는 TemplateProcessor를 확장시킨다. 이는 또한 몇 개의 방법들을 포함한다. 이는 캐릭터들, 코멘트, endDocument, endElement, processingInstruction, pushElement, pushTemplate, startDocument, startElement를 포함하는 방법들을 SAX 순응 템플릿 프로세서로부터 계승한다. 또한, DocumentProcessor 인터페이스의 getOutputStream 방법은 공개 java.io.OutputStream getOutputStream()으로서 표명될 수 있다. 이 방법은 이러한 프로세서에 의해 이용되는 출력 스트림을 얻는다. 이러한 객체는 스트리밍 모드 변환에 대해 널이 될 수 없다. getDOMByRootName 방법은 공개 org.w3c.dom.Node getDOMByRootName(java.lang.String name)으로 표명될 수 있다. 이 방법은 소정의 네임에 대해 DOM 객체를 검색(retrieve)한다. getOutputTemplate 방법은 공개 XSTtemplategetOutputTemplate()으로서 표명될 수 있다. 이 방법은 이러한 변환의 루트 템플릿인 출력 템플릿을 얻는다. getSchemaPath 방법은 공개 java.lang.StringgetSchemaPath()로서 표명될 수 있다. 이 방법은 스키마 보조 도큐먼트를 위한 스키마 경로를 얻는다. getTemplatePath 방법은 공개 java.lang.StringgetTemplatePath()로서 표명될 수 있다. 이 방법은 템플릿 경로를 얻는다. getTemplates 방법은 공개 java.util.Hashtable getTemplates()로서 표명될 수 있다. 이 방법은 현재 템플릿 리스트를 얻는다. getXPathContext 방법은 공개 org.apache.xpath.XPathContextgetXPathContext()로서 표명될 수 있다. 이 방법은 XPath 실행 콘텍스트를 얻는바, 이는 소스 도큐먼트 트리에 콘텍스트 노드를 포함해야 한다. 룩업 방법은 공개 java.lang.String lookup(java.lang.String key, java.lang.String value, java.util.Hashtable ht, java.lang.String method, java.lang.String event, XSTtemplate templ)로서 표명될 수 있다. 이 방법은 지정된 방법을 이용하여 소정의 노드에 대한 값을 룩업한다. 그의 파라미터 리스트에서, localName은 제 1 선택의 네임이기도 한 콘텍스트 노드의 네임이고; value는 콘텍스트 노드의 값이고; ht는 템플릿에 지정된 params에 대한 값들을 저장하는 데에 이용되는 해시표이고; method는 룩업에 이용되는 방법의 네임이고; 이벤트는 이 방법이 호출될 때의 SAX 이벤트이고; 그리고 templ은 콘텍스트 노드의 테플릿이다. 이 방법은 소정의 콘텍스트 노드에 대한 값을 리턴시킨다. putTemplates 방법은 공개 void putTemplates(java.util.HashtabletemplList)로서 표명될 수 있다. 이 방법은 현재 템플릿 리스트에 템플릿들의 리스트를 부가한다. setOutputStream 방법은 공개 void setOutputStream(java.io.OutputStream os)로서 표명될 수 있다. 스트리밍 모드 변환에 있어서, 이 방법은 이러한 프로세서에 대해 OutputStream을 세트시킨다. setSchemaPath 방법은 공개 void setSchemaPath(java.lang.String path)로서 표명될 수 있다. 이 방법은 스키마 보조 도큐먼트에 대한 스키마 경로를 세트시킨다. setTemplatePath 방법은 공개 void setTemplatePath(java.lang.String path)로서 표명될 수 있다. 이 방법은 테플릿 경로를 세트시킨다.
TemplateProcessor에 대한 공개 인터페이스는 몇 개의 방법들을 포함한다. getTemplates 방법은 공개 java.util.Hashtable getTemplates()로서 표명될 수 있다. 이 방법은 현재 템플릿 리스트를 얻는다. pushElement 방법은 공개 void pushElement(java.lang.Object elem)로서 표명될 수 있다. 이 방법은 요소 스택에 요소를 푸쉬한다. pushTemplate 방법은 공개 void pushTemplate(java.lang.String name,java.lang.Object templ)로서 표명될 수 있다. 이 방법은, 네임이 푸쉬될 객체의 네임이고 temp1이 푸쉬될 템플릿의 객체일 때, 템플릿 스택에 템플릿을 푸쉬한다. 캐릭터 방법은 공개 void characters(char[] ch, int start, int length) throws org.xml.sax.SAXException로서 표명될 수 있다. 이는 캐릭터들 또는 입력에 대한 SAX 이벤트 핸들러 인터페이스이다. 그의 파라미터 리스트에서, ch는 현재 요소의 값을 포함하는 캐릭터 어레이이고; start는 현재 요소의 값에 대한 캐릭터 어레이의 제 1 캐릭터의 인덱스이고; 그리고 length는 현재 요소의 값에 대한 캐릭터들의 수이다. endDocument 방법은 공개 void enddocument() throws org.xml.sax.SAXException으로서 표명될 수 있다. 이는 endDocument에 대한 SAX 이벤트 핸들러 인터페이스이다. endElement 방법은 공개 void endElement(java.lang. String namespace,java.lang.String localName,java.lang.StringrawName),throws org.xml.sax.SAXException으로서 표명될 수 있다. 이는 endElement에 대한 SAX 이벤트 핸들러 인터페이스이다. 그 파라미터 리스트에서, localName은 접두사(prefix)가 없는 현재 요소의 노드 네임이고; rawName은 (접두사가 있는) 현재 요소의 자격이 부여된 네임이다.
startDocument 방법은 공개 void startDocument() throws org.xml.sax.SAXException으로서 표명될 수 있다. 이는 startDocument에 대한 SAX 이벤트 핸들러 인터페이스이다. startElement 방법은 공개 void startElement(java.lang.String namespace, java. lang.String localName, java.lang.String rawName, org.xml.sax.Attributes atts) throws org.xml.sax.SAXException,javax.xml.transform.TransformerException,java.io.IOException으로서 표명될 수 있다. 이는 startElement에 대한 SAX 이벤트 핸들러 인터페이스이다. 그 파라미터 리스트에서, namespace는 현재 요소의 네임스페이스이고; localName은 (접두사가 없는) 현재 요소의 자격이 부여된 네임의 로컬 부분이고; rawName은 (접두사가 있는) 현재 요소의 자격이 부여된 네임이고; 그리고 attributes는 현재 요소와 관련된 속성들의 리스트이다. processinglnstruction 방법은 공개 void processingInstruction(java.lang.String target, java.lang.String data) throws org.xml.sax.SAXException으로서 표명될 수 있다. 이는 processingInstruction에 대한 SAX 이벤트 핸들러 인터페이스이다. 그 파라미터 리스트에서, target은 프로세싱 명령 타겟이고; data는 프로세싱 명령 데이터이거나, 또는 어떤 것도 제공되지 않을 경우에는 널이다. 이 방법은 org.xml.sax.SAXException를 규정하는바, 이는 가능하게는 다른 예외를 포함(wrap)하는 SAX 예외가 될 수 있다. 코멘트들이 지원된다.
공개 인터페이스 XSTElement는 XST 변환 랭귀지의 요소들을 지원한다. 이러한 인터페이스의 세부 사항은 제 1, 2 실시예들 간에서 달라진다. 제 1 실시예는 몇 개의 방법들을 포함한다. appendChild 방법은 공개 void appendChild(XSTElement elem)로서 표명될 수 있다. 이 방법은 이러한 요소에 자식 요소를 부가한다. appendAndPushChild 방법은 공개 void appendAndPushChild(XSTElement elem)로서 표명될 수 있다. 이 방법은 이러한 요소에 자식 요소를 부가하고, 이를 그 프로세서의 요소 스택에 푸쉬한다. appendContent 방법은 공개 void appendContent(java.lang.String content)로서 표명될 수 있다. 이 방법은 이러한 요소의 콘텐츠에 스트링의 콘텐츠를 부가한다. appendContent 방법은 공개 void appendContent(java.lang.Object content)로서 표명될 수 있다. 이 방법은 이러한 요소의 콘텐츠에 객체의 콘텐츠를 부가한다. attachChild 방법은 공개 void attachChild(XSTElement elem)로서 표명될 수 있다. 이 방법은, 비록 직접적인 자식이 아닐지라도, 이러한 요소에 자식 요소를 부가한다. clone 방법은 공개 java.lang.Objectclone()으로서 표명될 수 있다. 이 방법은 이러한 요소를 클론시키고 카피를 리턴시킨다. cloneAll 방법은 공개 XSTElementcloneAll()로서 표명될 수 있다. 이 방법은 그 자식들 모두를 포함하는 이러한 요소를 클론시킨다. execute 방법은 공개 java.lang.Objectexecute()로서 표명될 수 있다. 이는 요소 변환에 대한 엔트리 포인트이다. 이는 요소 변환의 결과를 리턴시킨다. execute 방법은 공개 void execute(java.io.OutputStream os)throws java.io.IOException으로서 표명될 수 있다. 이 방법은 이러한 요소의 변환을 실행시키고, 결과를 OutputStream에 보낸다. getAttribute 방법은 공개 java.lang.StringgetAttribute(java.lang.String qname)으로서 표명될 수 있다. 이 방법은 소정의 네임에 대한 속성의 콘텐츠를 검색한다. getChild 방법은 공개 XSTElementgetChild()로서 표명될 수 있다. 이 방법은 이러한 요소의 제 1 자식을 얻는다. getContent 방법은 공개 java.lang.ObjectgetContent()로서 표명될 수 있다. 이 방법은 이러한 요소의 콘텐츠를 얻는다. getElementName 방법은 공개 java.lang.StringgetElementName()으로서 표명될 수 있다. 이 방법은 이러한 요소의 네임 속성을 얻는다. getName 방법은 공개 java.lang.StringgetName()으로서 표명될 수 있다. 이 방법은 이러한 요소의 네임을 얻는다. getNamespace 방법은 공개 java.lang.StringgetNamespace()로서 표명된다. 이 방법은 이러한 요소의 네임스페이스를 얻는다. getParent 방법은 공개 java.lang.ObjectgetParent()로서 표명될 수 있다. 이 방법은 이러한 요소의 부모 요소를 얻는다. getSibling 방법은 공개 XSTElementgetSibling()으로서 표명될 수 있다. 이 방법은 이러한 요소의 시블링 요소를 얻는다. setProcessor 방법은 공개 void setProcessor(TemplateProcessor processor)로서 표명될 수 있다. 이 방법은 이러한 요소의 템플릿을 프로세싱하도록 프로세서를 세트시킨다. setParent 방법은 공개 void setParent(java.lang.Object parent)로서 표명될 수 있다. 이 방법은 이러한 요소의 부모 요소를 세트시킨다. setSibling 방법은 공개 void setSibling(XSTElement elem)으로서 표명될 수 있다. 이 방법은 이러한 요소의 시블링 요소를 세트시킨다.
XSTtemplate의 공개 인터페이스는 또한 XST 프로세싱 랭귀지의 요소를 처리한다. 이러한 공개 인터페이스는 몇개의 방법들을 포함한다. getParentTemplate 방법은 공개 XSTtemplategetParentTemplate()으로서 표명될 수 있다. 이 방법은 이러한 템플릿의 부모 템플릿을 얻는다. getID 방법은 공개 int getID()로서 표명될 수 있다. 이 방법은 이러한 템플릿의 ID를 얻는다. getDOM 방법은 공개 org.w3c.dom.NodegetDOM()으로서 표명될 수 있다. 이 방법은 이러한 템플릿의 DOM 객체를 얻는다. getOccurrences 방법은 공개 int getOccurrences()로서 표명될 수 있다. 이 방법은 이러한 템플릿의 이용 수를 얻는다. getMaxOccurrences 방법은 공개 int getMaxOccurrences()로서 표명될 수 있다. 이 방법은 이러한 템플릿의 허용된 최대 이용 수를 얻는다. isVariable 방법은 공개 boolean isVariable(java.lang.String name)으로서 표명될 수 있다. 이 방법은 템플릿이 소정의 네임에 대한 변수를 갖는 지의 여부를 체크한다. 이는 템플릿이 소정의 네임에 대한 변수를 갖는 지의 여부를 나타내는 플래그를 리턴시킨다. setParentTemplate 방법은 공개 void setParentTemplate(XSTtemplate templ)로서 표명될 수 있다. 이 방법은 이러한 템플릿의 부모 템플릿을 세트시킨다. setVariable 방법은 공개 booleansetVariable(java.lang.String name,java.lang.Object value)로서 표명될 수 있다. 이 방법은 이러한 템플릿의 변수의 콘텐츠를 세트시킨다. setVariable 방법은 공개 booleansetVariable(java.lang.String name, java.lang.Object value, boolean check)로서 표명될 수 있다. 이 방법은 이러한 템플릿의 변수의 콘텐츠를 세트시킨다. 그 파라미터 리스트에서, name은 변수의 네임이고; value는 세트될 변수의 콘텐츠이고; 그리고 check는 변수의 콘텐츠가 첫 번째로 체크되어야 함을 나타내는 플래그이다. write 방법은 공개 void write(java.io.OutputStream os)throws java.io.IO exception으로서 표명될 수 있다. 이 방법은 이러한 템플릿의 변환의 콘텐츠를 OutputStream에 기록한다.
제 1 실시예에서 이용되는 템플릿은 간단한 룰을 이용하여 도큐먼트들을 효율적으로 변환한다. 하지만, 이는 스키마 보조 프레임워크에 의존하여 논리 연산들을 지원하고, 자바 확장 기능들을 호출하는바, 이에 의해 성능을 저하시키고 템플릿 생성에 있어서의 복잡성을 증가시킨다.
제 2 실시예는 템플릿들에 어떠한 통상적인 XSLT 구문론을 이용한다. 이는 템플릿 랭귀지 내에 논리 연산들 및 자바 확장의 지원을 확립한다. 이러한 특징은 XST로 하여금 복잡한 변환들을 수행할 수 있게 한다. 제 2 실시예의 XSLT 스타일 구문론을 이용하는 템플릿은 다음과 같이 나타난다.
이러한 샘플에서, 속성 "name"은 템플릿의 네임을 특정하는 데에 이용된다. "Boing" 및 "Node2"는 모두 로컬 변수들이고, 이들의 콘텐츠는 변환되는 도큐먼트에 자동으로 전송될 것이다. 템플릿은 글로벌 변수 및 로컬 변수 모두를 가질 수 있다. 로컬 변수의 콘텐츠는 출력 도큐먼트에 자동으로 전송될 수 있다.
하기의 템플릿에서, "myVar"는 글로벌 변수이다. 이는 다음과 같은 템플릿의 콘텐츠에서 참조될 수 있다. 요소 "Node22"는 로컬 변수이다. 그 값은 글로벌 변수 "myVar"의 콘텐츠이다.
변환에 이용되는 모든 템플릿들에 대해서는 단일 템플릿 소스가 이용된다. 템플릿 소스는 요소 <xst:templates>로 시작해야 한다. 상기 샘플의 소스의 네임은 "SimpleTransform"이다. 상기 소스에는 2개의 템플릿들, 즉 Root 및 Node1이 있다. 일단 로드되면, 템플릿 소스의 모든 템플릿들은 고속의 액세스를 위해 메모리에 저장될 것이다. 변환 동안 부가적인 템프릿들에 있어서의 패스를 위해 인터페이스들이 제공될 것이다.
DOM은 템플릿의 속성들에 DOM의 루트 노드를 특정함으로써 소스의 스트리밍 동안 소스 도큐먼트의 프래그먼트 또는 일부에 대해 생성될 수 있다. 이후, XPath 표현들 또는 트리 조작들을 이용하여 DOM을 액세스할 수 있다.
상기 예에서, 속성 "domsrc"는 입력 도큐먼트의 DOM 소스에 대한 루트 노드를 정의한다. 이러한 속성은 이를 액세스하기 위해 다른 템플릿들에 대해 생성된 DOM의 네임으로서 이용될 것이다. 속성 "dom"은 이러한 템플릿에서 이용될 DOM의 네임을 특정한다. 일단 생성되면, DOM은 변환에 이용되는 모든 템플릿들에 대해 액세스가능하다.
다음은 이전 예의 템플릿에 의해 생성된 DOM을 재이용하는 다른 템플릿이다.
논리 연산들 "if" 및 "choose"는 제 2 실시예에서 지원된다.
이러한 예에서, test는 리프 노드 "ContactName" 위에 있다. 만일 test가 리프 노드 위에 없다면, 유효한 XPath 표현이 이용되어야 하고, XPath에 대한 콘텍스트 노드들/DOM이 이용가능해야 한다.
논리 연산 <choose>가 또한 지원된다. 요소 <choose>는 자식 요소들 <when> 및 <otherwise>를 갖는다.
요소 <choose>는 다수의 옵션들을 지원하기 위해 다수의 자식 요소들 <otherwise>를 가질 수 있다.
단지 마지막 자식 요소 <otherwise> 만이 속성 "test"를 갖지 않는다.
다음의 빌트인 기능들은 제 2 실시예에서 지원된다. 기능 스트링:
기능 접합(concat):
기능 스트링 길이:
기능 서브 스트링:
상기 템플릿에서, 변수 $Address="19191 Valco Parkway, Cupertino"가 주어지면, 서브 스트링(..) 기능으로부터의 리턴은 변수 "StreetAddress"에 대해 "19191 Valco Parkway"이다. 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(div) 등, XSLT 에 의해 지원되는 부가적인 빌트인 기능들이 또한 지원될 수 있다.
자바 확장 기능들이 namespace/prefix "java"와 함께 빌트인 기능들처럼 이용될 수 있다.
자바 확장 기능을 호출하기 위해 템플릿에 이용되는 인수들의 수는 그 자바 확장 기능의 인수들의 수와 일치해야 한다.
XSLT와 달리, 글로벌 변수 및 로컬 변수는 모두 변환 동안 변경될 수 있다. 다음은 변환 동안 글로벌 변수들을 변경하는 샘플이다.
XST 요소들 각각에 스키마는 도 15A에서 볼 수 있다. 도 15A에서, 요소의 속성들에 대한 속성 이용의 (요구되는 또는 선택적인) 값이 결정될 수 있다.
XML 요소 템플릿들은 템플릿 소스 도큐먼트의 루트 요소이다. 변수들에 대한 상기의 설명으로부터 알 수 있는 바와 같이, 그리고 하기에 나타낸 바와 같이, 이는 그 자식들로서 comment, include 또는 template을 가질 수 있다.
이 샘플에서, 요소 val-of는 <Nodel>의 콘텐츠에 대해 이용되고, 요소들 var 및 val-of는 요소 <Node2>의 콘텐츠에 대해 이용된다. 이러한 이용들에 대해서는 하기에서 설명한다.
요소 템플릿은 템플릿의 범위/수명 내에서 변환을 위한 룰들을 제공한다. 이는 또한 타겟/변환된 도큐먼트에 대한 레이아웃을 제공한다. 템플릿은 소스 XML 도큐먼트에서 매치하는 요소에 대한 startElement의 SAX 이벤트에서 활성화 또는 로드되고, 동일한 요소의 endElement의 SAX 이벤트에서 언로드될 것이다. XST는 가능하다면 endElement의 이벤트에서 템플릿의 변화된 콘텐츠를 전송하고자 할 것이다. 테플릿 요소의 구문론은 다음과 같다:
이러한 구문론에서, match는 매치시키기 위한 소스 도큐먼트의 요소의 ID/네임으로서, 이에 대해 템플릿은 startElement/endElement의 SAX 이벤트에서 로드/언로드될 것이다. namespace는 그 요소에 대한 매치를 위한 네임스페이스이다. 디폴트 값은 널이다. 카피는 디폴트 행동이 소스를 타겟 도큐먼트에 카피해야하는 지의 여부를 특정하는 플래그이다. 디폴트 값은 거짓이다. deferred는 그 부모 템플릿의 콘텐츠가 출력될 때 까지 템플릿의 콘텐츠의 출력을 지연시킬 것인 지의 여부를 특정하는 플래그이다. 디폴트는 거짓이다. inclusive는 copy=true일 때 루트 요소의 네임을 타겟 도큐먼트에 카피할 것인 지의 여부를 특정하는 플래그이다. 디폴트 값은 참이다. alias는 copy=true 및 inclusive=false일 때 타겟 도큐먼트에 카피되는 루트 요소의 네임에 대한 대체(replacement)이다. 디폴트 값은 널이다. Domsrc는 소스 도큐먼트의 요소의 네임으로서, 이를 루트 (요소)로서 이용하여 이 템플릿의 범위 내에서 DOM이 생성된다. DOM은 항상 글로벌 객체로서 생성되고, 모든 템플릿들에 대해 액세스가능하다. 디폴트 값은 널이다. skip은 변환 동안 스킵될 요소들에 대해 "|"에 의해 분리되는 네임들의 리스트를 포함한다. 디폴트 값은 널이다. param은 변환 동안 이후의 이용을 위해 저장될 요소들에 대해 "|"에 의해 분리되는 네임들의 리스트이다. 디폴트 값은 널이다. friend는 매치시키기 위한 소스 도큐먼트의 요소의 네임의 alias이다. 디폴트 값은 널이다.
템플릿의 활성화 또는 로딩 및 비활성화 또는 언로딩은 SAX 이벤트들에 의해 시작되기 때문에, 부모 템플릿을 이용하여, 그 자식 템플릿들의 실행/출력을 부모의 것을 출력하는 시간으로 연기할 수 있다. 이는, 소스 도큐먼트의 스트리밍 동안 그 자식 템플릿들의 실행 이전에, 요구되는 정보가 이용가능해지도록 보장하기 위한 것이다.
또한, 요소 val-of는 선택된 콘텐츠를 타겟 도큐먼트에 전송하는 데에 이용된다.
요소 val-of는 유효한 XPath 표현을 이용하여 초기화될 수 있다.
다음의 표현들은 속성 선택의 값으로서 이용될 수 있다. param은 템플릿에 대해 로컬인 파라미터를 말한다. <xst:val-of select="param(CountryCode)"/>를 예를 들어 보자. 변수는 가변 변수이다. <xst:val-of select="$v"/>를 예를 들어 보다. 빌트인 기능들은 상기 설명한 XST 빌트인 기능들을 포함한다. <xst:val-of select="string('my variable')"/>을 예를 들어 보자. 자바 확장은 자바 확장 기능이다. 이는 ":"에 의해 분리되는 클래스 경로 및 방법 네임을 포함해야 한다. <xst:val-of select="com.commerceone.xst.test.InfoRetriver:getDateTime($vO,2000)"/>를 예를 들어 보자. XPath/DOM은 DOM을 갖는 유효한 Xpath 표현이다. <xst:val-ofselect="//ListOfftemDetail/ItemDetail"dom="ListOfftemDetail"/>을 예를 들어 보자. 속성 dom은 select/XPath 표현을 위한 DOM 소스를 특정하는 데에 이용된다.
속성 disable-output-escaping은 다음의 기호들, <, > 및 &의 이스케이프(escape)를 디스에이블시키는 데에 이용된다. 디폴트는 이러한 기호들을 각각 &lt; &gt 및 &amp로서 이스케이프시키는 것이다.
요소 var는 XST에 변수를 정의/표명하는 데에 이용된다. 변수들은 XST에서 변하기 쉽다. 변수는 템플릿에 대해 글로벌이거나 또는 로컬이 될 수 있다. 템플릿의 직접적인 자식들인 모든 변수들은 글로벌 변수들이고, 모든 템플릿들에 대해 액세스가능하다.
요소 var는 유효한 XPath 표현을 이용하여 초기화될 수 있다. 속성 dom은 select/XPath 표현에 대한 소스로서 DOM을 특정하는 데에 이용될 수 있다. 요소 val-of에 대한 것과 동일한 표현들의 세트가 요소 var에 대해 이용될 수 있다.
다음의 코드 발췌는 상기 설명한 표현들을 나타낸다.
다음의 몇 개의 예들에서는, 다음의 XML 소스 입력이 이용된다:
앞선 템플릿들을 이용하여 변환되는 이러한 XML 소스 입력은 다음의 출력을 생성한다:
다음은 DOM 속성을 이용하는 샘플 템플릿이다:
상기 템플릿 루트에서 이용되는 DOM은 다음의 템플릿 Node1에서 생성된다. 이러한 템플릿 및 상기 소스 도큐먼트를 이용하는 출력 도큐먼트는 다음과 같다:
요소 bind-template은, 템플릿 속성 match의 값이 소스 도큐먼트의 요소의 네임과 매치할 때, 템플릿을 활성화 또는 바인드하는 데에 이용된다. 이는 템플릿 속성 copy가 거짓일 때에만 필요하다. copy가 참이면, 템플릿은 자식 템플릿이 소스 도큐먼트의 요소를 매치시킬 수 있는한, 그 범위 내의 어떠한 템플릿들을 바인드/로드시킬 수 있다. 템플릿을 매칭 및 활성화하기 위한 구문론은 <xst:bind-templatename="id"/>이다.
상기 소스 입력에 인가될 때, 다음의 템플릿:
은 다음의 출력을 생성한다:
요소 attribute는 사용자 정의 요소에 속성을 부가/소속시키는 데에 이용된다. 그 구문론은 다음과 같다:
요소들 val-of 및 var처럼, select expression은 유효한 XPath 표현이다.
상기 소스 입력에 인가될 때, 다음의 템플릿:
은 다음의 출력을 생성한다:
요소들 if, choose, when 및 otherwise는 XST에서 논리 연산들을 제공하는 데에 이용된다. 유효한 XPath 표현은 "test expression", 즉 속성 테스트의 값에 대해 이용될 수 있다. 이들의 구문론은 다음과 같다:
상기 소스 입력에 인가될 때, 다음의 템플릿:
은 다음의 출력을 생성한다:
요소 comment는 타겟 도큐먼트에 코멘트를 부가하는 데에 이용된다. 이는 어떠한 템플릿 요소들의 자식이 될 수 있다. 그 구문론은 다음과 같다:
요소 fall-back은, 템플릿 요소들 bind-template, load-template 및 redirect에 대한 행동이 실패할 때, 에러 이벤트들 또는 디버그 정보를 처리하기 위해 애플리케이션에 대한 기회를 제공하는 데에 이용된다.
다음의 템플릿은 fall-back의 구문론을 예시한다.
지정된 템플릿이 로드될 수 없다면, 애플리케이션에 의해 제공되는 ErrorHandler 또는 타겟 도큐먼트에 메세지가 전송될 것이다.
요소 for-each는 DOM의 노들의 세트, 또는 입력 도큐먼트의 프래그먼트 또는 서브 섹션에 대해 생성되는 다른 트리 구조를 통해 루프시키는 데에 이용된다. 그 구문론은 다음과 같다:
다음의 템플릿:
이 다음의 소스 입력에 인가되면:
다음의 출력을 생성한다:
요소 include는 템플릿 소스에 저장된 부가적인 템플릿들을 포함하는 데에 이용된다. 애플리케이션에 의해 제공되는 AURIResolver는 포함된 소스에 대한 uri를 결정(resolve)하는 데에 이용된다. 그 구문론은 <xst:includehref="uri"/>이다.
요소 load-template은, 실행중인 템플릿의 콘텐츠가 출력되고 있을 때, 다이내믹하게, 템플릿을 활성화시키거나 메모리에 로드시키는 데에 이용된다. 로딩 템플릿은 로드되는 템플릿에 파라미터들을 패스시킬 수 있다. 이러한 파라미터들은 로드되는 템플릿에 표명될 필요가 없다. 로드되는 템플릿은 로컬 변수들 및 param들을 포함하는 로딩 템플릿의 런타임 콘텍스트를 액세스할 수 있다. 그 구문론은 다음과 같다:
제 2 실시예에 따르면, 다음의 샘플 "템플릿들"은 한 쌍의 "템플릿" 요소들을 포함한다:
상기 샘플에서, 템플릿 "loaded"는 템플릿 "root"에 의해 로드된다. 로딩 이후의 등가의 템플릿은 다음과 같다.
요소 message는 커스터마이즈된 메세지들에 대해 이용된다. 그 구문론은 메세지 </xst:message>의 <xst:message> 콘텐츠이다.
요소 redirect는 출력의 일부를 지정된 타겟으로 전환시키는 데에 이용된다. 그 구문론은 다음과 같다:
다음은 redirect를 이용하는 샘플 템플릿들이다:
유효한 XPath 표현이 속성 eref의 값에 대해 이용될 수 있다.
엔티티 레퍼런스 efef는 애플리케이션에 의해 제공되는 URIResolver에 의해 결정되어야 하고, 리턴은 "redirect"에 대한 개방된 결과 객체를 매니지/클로우즈할 수 있는 com.commerceone.xst.swijaxp.ResultManager의 객체이어야 한다.
어떠한 실시예들에서는, 스트리밍 모드 변환 및 버퍼 모드 변환이 모두 지원된다. 스트리밍 모드 변환에서, 루트 템플릿은 카피 모드에 있다. 출력을 위한 데이터가 이용가능해질 때, XST는 변환된 콘텐츠의 작은 버퍼들로부터 스트리밍된다. 자식 템플릿을 로딩 또는 활성화하기 전에, 그 자식 템플릿들의 스트리밍을 위한 경로를 클리어하기 위해 부모 템플릿은 그 자체의 변환된 콘텐츠로부터 스트리밍된다. 템플릿을 언로딩 또는 비활성화하기 전에, 그 시블링들의 스트리밍을 위한 경로를 클리어하기 위해 템플릿들은 그의 변환된 콘텐츠로부터 스트리밍된다. 버퍼 모드 변환에서, 루트 템플릿은 카피 모드에 없다. XST는 변환된 콘텐츠로부터 스트리밍되지 않는다. 이는, 부모가 카피 모드에 있는 경우, 템플릿의 변환된 콘텐츠를 언로딩하기 전에, 그 부모에게 부가한다.
변환을 위해 요구되는 정보가 당분간 이용가능하지 않을 때에는, 연기 모드(deferred-mode) 템플릿이 이용된다. 이는 전체 보다 적은 변환에 대한 버퍼링을 제공한다. 연기 모드는 템플릿의 프로세싱 동안 스트리밍의 디폴트 행동을 중지(suspend)시킨다. 연기 모드 템플릿은 그의 콘텐츠를 스트리밍하는 대신 그의 부모 템플릿에 등록한다. 연기 모드는 버퍼된 변환에 어떠한 영향도 미치지 않는데, 그 이유는 전체 변환이 실제로 연기되기 때문이다. 템플릿 룰들의 일 실시예에 따르면, 템플릿은 단지 1개의 등록된 자식 템플릿 만이 연기될 수 있게 할 수 있다. 다른 실시예들은 등록된 임의수의 자식 템플릿들이 연기되는 것을 지원할 수 있다. 일 실시예에서, 부모 템플릿은, 1개가 있는 경우, 이전에 등록된 자식 템플릿의 어떠한 변환된 콘텐츠, 및 새로운 자식 템플릿을 등록하기 전에 그 자신의 콘텐츠를 스트리밍시킨다.
제 1 실시예에서, 스트리밍은 요구되는 즉시 더미 템플릿들에 의해 구현될 수 있다. 템플릿의 변환된 콘텐츠의 스트리밍은 startElement 또는 endElement중 어느 하나의 SAX 이벤트에서 행해진다. 더미 템플릿들을 부가함으로써, 부가적인 SAX 이벤트들을 도입시켜 메모리에서의 변환된 콘텐츠를 감소시킨다. 결과적으로, 변환 속도를 증가시킨다.
이해될 수 있는 사항으로서, 지금까지 본 발명이 바람직한 실시예들을 참조하여 상세히 예시되었지만, 이러한 예들은 한정적인 것이 아니라 예시적인 것이다. 개시된 실시예들은 컴퓨터 지원 프로세싱과 관련된다. 따라서, 본 발명은 컴퓨터 지원 프로세싱을 위한 방법들, 변환 프로세싱을 수행하기 위한 논리를 포함하는 시스템들, 변환 프로세싱을 수행하기 위한 논리에 의해 특징화되는 미디어, 변환 프로세싱을 수행하기 위한 논리에 의해 특징화되는 데이터 스트림들, 또는 컴퓨터 액세스가능 변환 프로세싱 서비스들에서 구현될 수 있다. 변경들 및 결합들이 당업자에게 자명할 것이며, 이러한 변경들 및 결합들은 하기의 청구항에 의해 규정되는 본 발명의 범위 및 정신 내에 있다.

Claims (39)

  1. 도큐먼트를 변환하는 방법에 있어서,
    복수의 요소 시작 이벤트들, 입력 이벤트들 및 요소 종료 이벤트들을 포함하는, 스트림의 이벤트들을 수신하는 단계와;
    상기 요소를 네임드 템플릿에 매치시키고 상기 네임드 템플릿을 활성화시킴으로써, 또는 매치하는 것이 없으면, 상기 요소를 부모 요소의 콘텐츠로서 처리함으로써, 상기 요소에 대한 요소 시작 이벤트에 응답하는 단계와;
    만일 있는 경우, 매칭하는 네임드 템플릿을 이용하여 현재 요소에 대한 요소 종료 이벤트에 응답하는 단계를 포함하며,
    상기 요소 종료 이벤트에 응답하는 단계는:
    상기 매칭하는 네임드 템플릿의 명령들에 응답하여, 상기 현재 요소에 대응하는 문자 텍스트 또는 입력 이벤트들의 적어도 일부를 출력하는 단계와;
    상기 현재 요소의 콘텐츠에 대응하는 입력 이벤트들을 클리어하는 단계와; 그리고
    상기 매칭하는 네임드 템플릿을 비활성화하는 단계를 포함하는 것을 특징으로 하는 방법.
  2. 제 1 항에 있어서,
    상기 스트림의 이벤트들은 전자 상거래 도큐먼트에 대응하는 것을 특징으로 하는 방법.
  3. 제 1 항에 있어서,
    상기 스트림의 이벤트들은, 그 논리 구조에 따라 저장 유닛들의 세트들을 식별하는 캐릭터 데이터 엔코딩 텍스트 캐릭터들 및 마크업 데이터를 포함하는 도큐먼트에 대응하는 것을 특징으로 하는 방법.
  4. 제 1 항에 있어서,
    상기 스트림의 이벤트들은, 그 논리 구조에 따라 저장 유닛들의 세트들을 식별하는 캐릭터 데이터 엔코딩 텍스트 캐릭터들 및 마크업 데이터를 포함하는 전자 상거래 도큐먼트에 대응하는 것을 특징으로 하는 방법.
  5. 제 1 항에 있어서,
    복수의 네임드 템플릿 인스턴스들이 템플릿 소스에 함께 저장되는 것을 특징으로 하는 방법.
  6. 제 2 항에 있어서,
    복수의 네임드 템플릿 인스턴스들이 템플릿 소스에 함께 저장되는 것을 특징으로 하는 방법.
  7. 제 3 항에 있어서,
    복수의 네임드 템플릿 인스턴스들이 템플릿 소스에 함께 저장되는 것을 특징으로 하는 방법.
  8. 제 1 항에 있어서,
    상기 요소 시작 이벤트에 응답하는 단계는 상기 네임드 템플릿에 대응하는 범위에서 1개 또는 그 이상의 변수들을 활성화시키는 것을 더 포함하고, 대응하는 요소 종료 이벤트에 응답하는 단계는 상기 변수들을 비활성화시키는 것을 더 포함하는 것을 특징으로 하는 방법.
  9. 제 3 항에 있어서,
    상기 요소 시작 이벤트에 응답하는 단계는 상기 네임드 템플릿에 대응하는 범위에서 1개 또는 그 이상의 변수들을 활성화시키는 것을 더 포함하고, 대응하는 요소 종료 이벤트에 응답하는 단계는 상기 변수들을 비활성화시키는 것을 더 포함하는 것을 특징으로 하는 방법.
  10. 제 7 항에 있어서,
    상기 요소 시작 이벤트에 응답하는 단계는 상기 네임드 템플릿에 대응하는 범위에서 1개 또는 그 이상의 변수들을 활성화시키는 것을 더 포함하고, 대응하는 요소 종료 이벤트에 응답하는 단계는 상기 변수들을 비활성화시키는 것을 더 포함하는 것을 특징으로 하는 방법.
  11. 제 8 항에 있어서,
    상기 네임드 템플릿에 대응하는 요소 종료 이벤트에 응답하는 단계는 논리 명령들을 처리하여 상기 변수들을 조작하는 것을 더 포함하는 것을 특징으로 하는 방법.
  12. 제 11 항에 있어서,
    상기 논리 명령들은 선택에 따라 substring 및 concatenation을 포함하는 것을 특징으로 하는 방법.
  13. 제 11 항에 있어서,
    상기 논리 명령들은 선택에 따라 if 및 choose 흐름 제어 연산자들을 포함하는 것을 특징으로 하는 방법.
  14. 제 11 항에 있어서,
    상기 논리 명령들은 선택에 따라 if, choose, when, otherwise 및 for-each 흐름 제어 연산자들을 포함하는 것을 특징으로 하는 방법.
  15. 제 1 항에 있어서,
    상기 요소 시작 이벤트에 응답하는 단계는, 상기 매칭하는 네임드 템플릿과 관련된 명령에 응답하여, 상기 네임드 템플릿의 범위 내에서 상기 요소 및 서브 요소들의 트리 표현을 생성하는 것을 더 포함하는 것을 특징으로 하는 방법.
  16. 제 13 항에 있어서,
    상기 요소 시작 이벤트에 응답하는 단계는, 상기 매칭하는 네임드 템플릿과 관련된 명령에 응답하여, 상기 네임드 템플릿의 범위 내에서 상기 요소 및 서브 요소들의 트리 표현의 생성을 시작하는 것을 더 포함하는 것을 특징으로 하는 방법.
  17. 도큐먼트를 변환하는 컴퓨터 지원 방법에 있어서,
    복수의 요소 시작 이벤트들, 입력 이벤트들 및 요소 종료 이벤트들을 포함하는, 스트림의 이벤트들을 수신하는 단계와;
    상기 요소를 네임드 템플릿에 매치시키고, 만일 있는 경우, 상기 네임드 템플릿에 대응하는 범위에서 상기 네임드 템플릿 및 변수들을 활성화시킴으로써, 상기 요소 시작 이벤트에 응답하는 단계와;
    내포된 요소를 부가적인 네임드 템플릿에 매치시키고, 만일 있는 경우, 상기 부가적인 네임드 템플릿에 대응하는 범위에서 상기 부가적인 네임드 템플릿 및 변수들을 활성화시킴으로써, 또는 매치하는 것이 없으면, 상기 내포된 요소를 부모 요소의 콘텐츠로서 처리함으로써, 상기 내포된 요소 시작 이벤트에 응답하는 단계와;
    가장 최근에 활성화된 네임드 템플릿의 명령들에 따라 상기 입력 이벤트들에 반응하는 단계와, 여기서 상기 명령들은 선택에 따라 1개 또는 그 이상의 변수들로의 입력의 할당을 포함하고; 그리고
    만일 있는 경우, 상기 대응하는 네임드 템플릿을 처리함으로써 상기 요소 종료 이벤트에 응답하는 단계를 포함하며;
    상기 요소 종료 이벤트에 응답하는 단계는:
    상기 네임드 템플릿의 명령들을 처리하는 단계와, 여기서 상기 명령들은 선택에 따라 상기 변수들을 조작하고 문자 텍스트 및 상기 변수들의 적어도 일부를 출력하는 것을 포함하며;
    상기 대응하는 네임드 템플릿의 범위에서 상기 변수들을 클리어하는 단계와; 그리고
    상기 대응하는 네임드 템플릿을 비활성화하는 단계를 포함하는 것을 특징으로 하는 방법.
  18. 제 17 항에 있어서,
    상기 스트림의 이벤트들은 전자 상거래 도큐먼트에 대응하는 것을 특징으로 하는 방법.
  19. 제 17 항에 있어서,
    상기 스트림의 이벤트들은, 그 논리 구조에 따라 저장 유닛들의 세트들을 식별하는 캐릭터 데이터 엔코딩 텍스트 캐릭터들 및 마크업 데이터를 포함하는 도큐먼트에 대응하는 것을 특징으로 하는 방법.
  20. 제 17 항에 있어서,
    상기 스트림의 이벤트들은, 그 논리 구조에 따라 저장 유닛들의 세트들을 식별하는 캐릭터 데이터 엔코딩 텍스트 캐릭터들 및 마크업 데이터를 포함하는 전자 상거래 도큐먼트에 대응하는 것을 특징으로 하는 방법.
  21. 제 17 항에 있어서,
    복수의 네임드 템플릿 인스턴스들이 템플릿 소스에 함께 저장되는 것을 특징으로 하는 방법.
  22. 제 18 항에 있어서,
    복수의 네임드 템플릿 인스턴스들이 템플릿 소스에 함께 저장되는 것을 특징으로 하는 방법.
  23. 제 19 항에 있어서,
    복수의 네임드 템플릿 인스턴스들이 템플릿 소스에 함께 저장되는 것을 특징으로 하는 방법.
  24. 제 17 항에 있어서,
    상기 네임드 템플릿에 대응하는 요소 종료 이벤트에 응답하는 단계는 논리 명령들을 처리하여 상기 변수들을 조작하는 것을 더 포함하는 것을 특징으로 하는 방법.
  25. 제 24 항에 있어서,
    상기 논리 명령들은 선택에 따라 substring 및 concatenation을 포함하는 것을 특징으로 하는 방법.
  26. 제 24 항에 있어서,
    상기 논리 명령들은 선택에 따라 if 및 choose 흐름 제어 연산자들을 포함하는 것을 특징으로 하는 방법.
  27. 제 24 항에 있어서,
    상기 논리 명령들은 선택에 따라 if, choose, when, otherwise 및 for-each 흐름 제어 연산자들을 포함하는 것을 특징으로 하는 방법.
  28. 제 17 항에 있어서,
    상기 요소 시작 이벤트에 응답하는 단계는, 상기 매칭하는 네임드 템플릿과 관련된 명령에 응답하여, 상기 네임드 템플릿의 범위 내에서 상기 요소 및 서브 요소들의 트리 표현을 생성하는 것을 더 포함하는 것을 특징으로 하는 방법.
  29. 제 26 항에 있어서,
    상기 요소 시작 이벤트에 응답하는 단계는, 상기 매칭하는 네임드 템플릿과 관련된 명령에 응답하여, 상기 네임드 템플릿의 범위 내에서 상기 요소 및 서브 요소들의 트리 표현의 생성하는 것을 더 포함하는 것을 특징으로 하는 방법.
  30. XML 도큐먼트 상에서 변환을 수행하는 동안의 메모리 이용 방법에 있어서,
    1개 또는 그 이상의 서브 템플릿들을 포함하는 템플릿을 로딩하는 단계와; 그리고
    입력 소스로부터의 이벤트 스트림을 처리하는 단계를 포함하고;
    상기 처리 단계는:
    상기 입력 소스의 시작 이벤트에 서브 템플릿을 매치시키는 단계와;
    상기 시작 이벤트에 매치되는 종료 이벤트가 수신될 때 까지, 입력 스트림을 버퍼링하는 단계와; 그리고
    상기 버퍼링된 입력 스트림을 변환하기 위해 상기 서브 템플릿의 명령들을 처리하고, 처리 결과를 출력하며, 그리고 상기 버퍼링 및 처리에 이용된 메모리를 재이용을 위해 해제하는 단계를 반복적으로 포함하는 것을 특징으로 하는 메모리 이용 방법.
  31. 제 30 항에 있어서,
    상기 시작 이벤트에 서브 템플릿을 매치시키는 단계는 상기 서브 템플릿에 대응하는 범위에서 1개 또는 그 이상의 변수들을 활성화시키는 것을 더 포함하고, 상기 재이용을 위해 메모리를 해제하는 단계는 상기 변수들을 비활성화시키는 것을 더 포함하는 것을 특징으로 하는 메모리 이용 방법.
  32. 제 30 항에 있어서,
    상기 논리 명령들은 선택에 따라 substring 및 concatenation을 포함하는 것을 특징으로 하는 메모리 이용 방법.
  33. 제 30 항에 있어서,
    상기 논리 명령들은 선택에 따라 if 및 choose 흐름 제어 연산자들을 포함하는 것을 특징으로 하는 메모리 이용 방법.
  34. 제 30 항에 있어서,
    상기 논리 명령들은 선택에 따라 if, choose, when, otherwise 및 for-each 흐름 제어 연산자들을 포함하는 것을 특징으로 하는 메모리 이용 방법.
  35. 제 30 항에 있어서,
    상기 논리 명령들은 선택에 따라 사용자 커스텀 확장들의 호출을 포함하는 것을 특징으로 하는 메모리 이용 방법.
  36. 제 35 항에 있어서,
    상기 사용자 커스텀 확장들은 자바 프로그래밍 랭귀지로 기록되는 것을 특징으로 하는 메모리 이용 방법.
  37. 제 30 항에 있어서,
    상기 서브 템플릿을 처리하는 단계 이전에, 상기 입력 스트림을 선 처리(pre-process)하기 위해 적어도 1개의 부가적인 핸들러를 호출하는 단계를 더 포함하는 것을 특징으로 하는 메모리 이용 방법.
  38. 제 30 항에 있어서,
    상기 결과를 출력하는 단계는 상기 서브 템플릿의 처리 결과를 더 처리하기 위해 적어도 1개의 부가적인 핸들러를 호출하는 것을 포함하는 것을 특징으로 하는 메모리 이용 방법.
  39. 제 30 항에 있어서,
    상기 시작 이벤트에 상기 서브 템플릿을 매치시키는 단계는, 상기 서브 템플릿과 관련된 명령에 응답하여, 상기 서브 템플릿의 범위 내에서 상기 요소 및 서브 요소들의 트리 표현을 생성하는 것을 더 포함하는 것을 특징으로 하는 메모리 이용 방법.
KR1020057002653A 2002-08-16 2003-08-13 Xml 스트리밍 변환기 KR20050036973A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/222,752 2002-08-16
US10/222,752 US7721202B2 (en) 2002-08-16 2002-08-16 XML streaming transformer

Publications (1)

Publication Number Publication Date
KR20050036973A true KR20050036973A (ko) 2005-04-20

Family

ID=31715056

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020057002653A KR20050036973A (ko) 2002-08-16 2003-08-13 Xml 스트리밍 변환기

Country Status (7)

Country Link
US (4) US7721202B2 (ko)
EP (1) EP1543470A2 (ko)
JP (1) JP2005535982A (ko)
KR (1) KR20050036973A (ko)
CN (1) CN100410961C (ko)
AU (1) AU2003264050A1 (ko)
WO (1) WO2004017166A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007047422A1 (en) * 2005-10-12 2007-04-26 Microsoft Corporation Inverse hierarchical approach to data

Families Citing this family (64)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050086584A1 (en) * 2001-07-09 2005-04-21 Microsoft Corporation XSL transform
US7962925B2 (en) * 2002-02-22 2011-06-14 Oracle International Corporation System and method for XML data binding
US7065561B2 (en) * 2002-03-08 2006-06-20 Bea Systems, Inc. Selective parsing of an XML document
US20050005116A1 (en) * 2002-09-18 2005-01-06 Commerce One Operations, Inc. Dynamic interoperability contract for web services
US20040111396A1 (en) * 2002-12-06 2004-06-10 Eldar Musayev Querying against a hierarchical structure such as an extensible markup language document
CA2414479A1 (en) * 2002-12-16 2004-06-16 Ibm Canada Limited - Ibm Canada Limitee A visual debugger for stylesheets
US7240077B1 (en) 2002-12-30 2007-07-03 Amazon.Com, Inc. Web site content change management
US7653636B2 (en) * 2003-02-28 2010-01-26 Bea Systems, Inc. Systems and methods for streaming XPath query
WO2004088549A2 (de) * 2003-04-01 2004-10-14 Siemens Aktiengesellschaft Verfahren und anordnung zur veränderung von software oder quellcode
US7373594B1 (en) 2003-04-30 2008-05-13 Amazon.Com, Inc. Managing the release of electronic content using a template without version logic
US7401075B2 (en) * 2003-06-11 2008-07-15 Wtviii, Inc. System for viewing and indexing mark up language messages, forms and documents
US8127224B2 (en) 2003-06-11 2012-02-28 Wtvii, Inc. System for creating and editing mark up language forms and documents
US7707548B2 (en) * 2003-07-22 2010-04-27 Verizon Business Global Llc Integration of information distribution systems
US7380205B2 (en) * 2003-10-28 2008-05-27 Sap Ag Maintenance of XML documents
US7647415B1 (en) * 2004-02-25 2010-01-12 Sun Microsystems, Inc. Dynamic web services stack
US7877366B2 (en) * 2004-03-12 2011-01-25 Oracle International Corporation Streaming XML data retrieval using XPath
WO2005109212A2 (en) 2004-04-30 2005-11-17 Commvault Systems, Inc. Hierarchical systems providing unified of storage information
US8719699B2 (en) * 2004-05-26 2014-05-06 Typefi Systems Pty. Ltd. Dynamic positioning of components using document templates
US7617449B2 (en) * 2004-05-28 2009-11-10 Microsoft Corporation Method and system for mapping content between a starting template and a target template
US7437665B2 (en) * 2004-07-23 2008-10-14 International Business Machines Corporation SEF parser and EDI parser generator
DE102004036976A1 (de) * 2004-07-30 2006-03-23 Siemens Ag Verfahren zur Generierung von Internetseiten, zugehöriges Computerprogramm und Computersystem
US9171100B2 (en) * 2004-09-22 2015-10-27 Primo M. Pettovello MTree an XPath multi-axis structure threaded index
US7860989B2 (en) * 2005-02-02 2010-12-28 Microsoft Corporation Efficient transformation of interchange format messages
US7444345B2 (en) * 2005-02-15 2008-10-28 International Business Machines Corporation Hierarchical inherited XML DOM
JP4859072B2 (ja) * 2005-06-02 2012-01-18 トムソン ライセンシング コンテンツ・タイミング方法およびシステム
US7934200B2 (en) * 2005-07-20 2011-04-26 International Business Machines Corporation Enhanced scenario testing of an application under test
US7664742B2 (en) * 2005-11-14 2010-02-16 Pettovello Primo M Index data structure for a peer-to-peer network
US20110010518A1 (en) 2005-12-19 2011-01-13 Srinivas Kavuri Systems and Methods for Migrating Components in a Hierarchical Storage Network
WO2007117298A2 (en) * 2005-12-30 2007-10-18 Public Display, Inc. Event data translation system
CN100573516C (zh) * 2006-01-12 2009-12-23 鸿富锦精密工业(深圳)有限公司 虚拟机系统及利用该系统执行指令的方法
US20070168857A1 (en) * 2006-01-17 2007-07-19 Oracle International Corporation Transformation of Source Data in a Source Markup Language to Target Data in a Target Markup Language
US20070174309A1 (en) * 2006-01-18 2007-07-26 Pettovello Primo M Mtreeini: intermediate nodes and indexes
US7596548B2 (en) * 2006-01-20 2009-09-29 International Business Machines Corporation Query evaluation using ancestor information
US8286075B2 (en) * 2006-03-07 2012-10-09 Oracle International Corporation Reducing resource requirements when transforming source data in a source markup language to target data in a target markup language using transformation rules
US20070250471A1 (en) * 2006-04-25 2007-10-25 International Business Machines Corporation Running XPath queries over XML streams with incremental predicate evaluation
US8112388B2 (en) * 2007-08-03 2012-02-07 Sap Ag Dependency processing of computer files
US20090193410A1 (en) 2007-09-28 2009-07-30 Xcerion Aktiebolag Network operating system
US20090094606A1 (en) * 2007-10-04 2009-04-09 National Chung Cheng University Method for fast XSL transformation on multithreaded environment
US9245182B2 (en) * 2008-03-28 2016-01-26 International Business Machines Corporation Enhancing data in a screenshot
US7603655B1 (en) * 2008-03-31 2009-10-13 International Business Machines Corporation Method for dynamically streaming an XSLT transformation
US8397158B1 (en) * 2008-03-31 2013-03-12 Sonoa Networks India (PVT) Ltd System and method for partial parsing of XML documents and modification thereof
US8145608B2 (en) * 2008-04-28 2012-03-27 Infosys Technologies Limited Method and system for rapidly processing and transporting large XML files
US8612945B2 (en) 2008-05-13 2013-12-17 Nec Corporation XML processing device, XML processing method, and XML processing program
US8275779B2 (en) * 2009-01-22 2012-09-25 International Business Machines Corporation Data tranformations for applications supporting different data formats
US8856154B2 (en) * 2009-01-22 2014-10-07 International Business Machines Corporation Data tranformations between a source application and service-oriented target applications supporting different data formats
US8301647B2 (en) * 2009-01-22 2012-10-30 International Business Machines Corporation Data tranformations for a source application and multiple target applications supporting different data formats
US8347208B2 (en) * 2009-03-04 2013-01-01 Microsoft Corporation Content rendering on a computer
US9256591B2 (en) * 2009-07-24 2016-02-09 Hewlett-Packard Development Company, L.P. Document handling method
US8631028B1 (en) 2009-10-29 2014-01-14 Primo M. Pettovello XPath query processing improvements
CA2760321C (en) 2011-11-30 2018-11-20 Ibm Canada Limited - Ibm Canada Limitee Tree structured data transform
US20140214899A1 (en) * 2013-01-25 2014-07-31 Hewlett-Packard Development Company, L.P. Leaf names and relative level indications for file system objects
US8930897B2 (en) 2013-03-15 2015-01-06 Palantir Technologies Inc. Data integration tool
US9098558B2 (en) * 2013-04-01 2015-08-04 Oracle International Corporation Enhanced flexibility for users to transform XML data to a desired format
US10275320B2 (en) 2015-06-26 2019-04-30 Commvault Systems, Inc. Incrementally accumulating in-process performance data and hierarchical reporting thereof for a data stream in a secondary copy operation
US9984175B2 (en) * 2015-09-30 2018-05-29 International Business Machines Corporation Mapping non-generic markup language elements to generic object-oriented programming language objects
US10176036B2 (en) 2015-10-29 2019-01-08 Commvault Systems, Inc. Monitoring, diagnosing, and repairing a management database in a data storage management system
US20170154019A1 (en) * 2015-11-30 2017-06-01 Open Text Sa Ulc Template-driven transformation systems and methods
US10331781B2 (en) * 2016-07-05 2019-06-25 Google Llc Template compilation using view transforms
US10482098B2 (en) * 2016-11-14 2019-11-19 Microsoft Technology Licensing, Llc Consuming streamed data records
US10831591B2 (en) 2018-01-11 2020-11-10 Commvault Systems, Inc. Remedial action based on maintaining process awareness in data storage management
US10402320B1 (en) * 2018-02-27 2019-09-03 Oracle International Corporation Verifying the validity of a transition from a current tail template to a new tail template for a fused object
US20200089750A1 (en) * 2018-09-17 2020-03-19 Servicenow, Inc. Streaming parser for structured data-interchange files
US20200192572A1 (en) 2018-12-14 2020-06-18 Commvault Systems, Inc. Disk usage growth prediction system
CA3046608A1 (en) * 2019-06-14 2020-12-14 Mathresources Incorporated Systems and methods for document publishing

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5557798A (en) 1989-07-27 1996-09-17 Tibco, Inc. Apparatus and method for providing decoupling of data exchange details for providing high performance communication between software processes
US6012098A (en) 1998-02-23 2000-01-04 International Business Machines Corp. Servlet pairing for isolation of the retrieval and rendering of data
US6487566B1 (en) * 1998-10-05 2002-11-26 International Business Machines Corporation Transforming documents using pattern matching and a replacement language
US6125391A (en) * 1998-10-16 2000-09-26 Commerce One, Inc. Market makers using documents for commerce in trading partner networks
US6397217B1 (en) * 1999-03-04 2002-05-28 Futuretense, Inc. Hierarchical caching techniques for efficient dynamic page generation
US6463440B1 (en) * 1999-04-08 2002-10-08 International Business Machines Corporation Retrieval of style sheets from directories based upon partial characteristic matching
US6658625B1 (en) 1999-04-14 2003-12-02 International Business Machines Corporation Apparatus and method for generic data conversion
US6940953B1 (en) * 1999-09-13 2005-09-06 Microstrategy, Inc. System and method for the creation and automatic deployment of personalized, dynamic and interactive voice services including module for generating and formatting voice services
US6718516B1 (en) * 1999-09-30 2004-04-06 International Business Machines Corporation Method for verifying context between multiple related XML tags in document object model (DOM)
US6675354B1 (en) * 1999-11-18 2004-01-06 International Business Machines Corporation Case-insensitive custom tag recognition and handling
US6829746B1 (en) * 1999-12-09 2004-12-07 International Business Machines Corp. Electronic document delivery system employing distributed document object model (DOM) based transcoding
US7590644B2 (en) * 1999-12-21 2009-09-15 International Business Machine Corporation Method and apparatus of streaming data transformation using code generator and translator
US6772413B2 (en) * 1999-12-21 2004-08-03 Datapower Technology, Inc. Method and apparatus of data exchange using runtime code generator and translator
US6691104B1 (en) 2000-01-12 2004-02-10 International Business Machines Corporation System and method for personalizing and applying a post processing tool system
US7111076B2 (en) * 2000-04-13 2006-09-19 Intel Corporation System using transform template and XML document type definition for transforming message and its reply
JP2001312446A (ja) * 2000-04-28 2001-11-09 Sony Corp 情報処理装置及び方法、情報処理システム、並びに媒体
US7191394B1 (en) * 2000-06-21 2007-03-13 Microsoft Corporation Authoring arbitrary XML documents using DHTML and XSLT
US20020069157A1 (en) * 2000-09-15 2002-06-06 Jordan Michael S. Exchange fusion
US20020099735A1 (en) * 2001-01-19 2002-07-25 Schroeder Jonathan E. System and method for conducting electronic commerce
US7194683B2 (en) * 2001-03-02 2007-03-20 International Business Machines Corporation Representing and managing dynamic data content for web documents
US6725231B2 (en) * 2001-03-27 2004-04-20 Koninklijke Philips Electronics N.V. DICOM XML DTD/schema generator
US20020157023A1 (en) * 2001-03-29 2002-10-24 Callahan John R. Layering enterprise application services using semantic firewalls
US20020184145A1 (en) * 2001-05-31 2002-12-05 Sun Microsystems, Inc. Methods and system for integrating XML based transactions in an electronic invoice presentment and payment environment
US6829745B2 (en) * 2001-06-28 2004-12-07 Koninklijke Philips Electronics N.V. Method and system for transforming an XML document to at least one XML document structured according to a subset of a set of XML grammar rules
US6961760B2 (en) * 2001-07-17 2005-11-01 International Business Machines Corporation Transforming data automatically between communications parties in a computing network
US6996781B1 (en) * 2001-10-31 2006-02-07 Qcorps Residential, Inc. System and method for generating XSL transformation documents
US7970826B2 (en) * 2001-12-06 2011-06-28 Hewlett-Packard Development Company, L.P. Transformational conversation definition language
WO2003094007A1 (en) * 2002-05-02 2003-11-13 Sarvega, Inc. System and method for transformation of xml documents using stylesheets
US7047488B2 (en) * 2002-07-19 2006-05-16 Open Invention Network Registry driven interoperability and exchange of documents

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007047422A1 (en) * 2005-10-12 2007-04-26 Microsoft Corporation Inverse hierarchical approach to data

Also Published As

Publication number Publication date
US9626345B2 (en) 2017-04-18
US20040034830A1 (en) 2004-02-19
US20170185571A1 (en) 2017-06-29
JP2005535982A (ja) 2005-11-24
WO2004017166A3 (en) 2004-05-13
CN100410961C (zh) 2008-08-13
US7721202B2 (en) 2010-05-18
US8762831B2 (en) 2014-06-24
WO2004017166A2 (en) 2004-02-26
AU2003264050A1 (en) 2004-03-03
US20100199172A1 (en) 2010-08-05
US20150026565A1 (en) 2015-01-22
EP1543470A2 (en) 2005-06-22
CN1689022A (zh) 2005-10-26

Similar Documents

Publication Publication Date Title
US9626345B2 (en) XML streaming transformer (XST)
AU2003243169B2 (en) System and method for processing of XML documents represented as an event stream
KR100583517B1 (ko) 소프트웨어 객체와 구조화 언어 요소 기반 문서간의 매핑시스템 및 방법
US7458022B2 (en) Hardware/software partition for high performance structured data transformation
US7240279B1 (en) XML patterns language
CA2417752A1 (en) Xml-robot
JP2006092529A (ja) Xml入力文書を検証するxmlスキーマを自動的に生成するシステムおよび方法
US20050091588A1 (en) Device for structured data transformation
EP1678643A1 (en) Expression grouping and evaluation
US20070050707A1 (en) Enablement of multiple schema management and versioning for application-specific xml parsers
Chiu et al. A compiler-based approach to schema-specific xml parsing
US7562009B1 (en) Linguistic processing platform, architecture and methods
US20080201697A1 (en) Extensible markup language parsing using multiple xml parsers
US20080104095A1 (en) Orthogonal Integration of De-serialization into an Interpretive Validating XML Parser
US20080184103A1 (en) Generation of Application Specific XML Parsers Using Jar Files with Package Paths that Match the SML XPaths
US8397158B1 (en) System and method for partial parsing of XML documents and modification thereof
US20070050705A1 (en) Method of xml element level comparison and assertion utilizing an application-specific parser
US20040205520A1 (en) System and method for introducing programming constructs into computer intelligible electronic data
Kirchner et al. Xemantics: a rewriting calculus-based semantics of XSLT
Armstrong Working with XML
Atanassow et al. Customizing an XML–Haskell data binding with type isomorphism inference in Generic Haskell
Torjusen et al. Towards integration of XML in the Creol object-oriented language
Torjusen et al. Paper# 3: Towards integration of XML in the Creol object-oriented language
Lanovaz Software Book: Patent Printer
Møller Static analysis for event-based XML processing

Legal Events

Date Code Title Description
N231 Notification of change of applicant
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application