KR101221306B1 - 데이터 구조를 항해하기 위한 방법 및 시스템 - Google Patents

데이터 구조를 항해하기 위한 방법 및 시스템 Download PDF

Info

Publication number
KR101221306B1
KR101221306B1 KR1020107014912A KR20107014912A KR101221306B1 KR 101221306 B1 KR101221306 B1 KR 101221306B1 KR 1020107014912 A KR1020107014912 A KR 1020107014912A KR 20107014912 A KR20107014912 A KR 20107014912A KR 101221306 B1 KR101221306 B1 KR 101221306B1
Authority
KR
South Korea
Prior art keywords
path
data structure
schema
item
expression
Prior art date
Application number
KR1020107014912A
Other languages
English (en)
Other versions
KR20100107463A (ko
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 KR20100107463A publication Critical patent/KR20100107463A/ko
Application granted granted Critical
Publication of KR101221306B1 publication Critical patent/KR101221306B1/ko

Links

Images

Classifications

    • 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

Abstract

데이터 구조의 항해를 위한 방법 및 시스템이 제공된다. 이 방법은, 실행시 데이터 구조(101)내의 하나 이상의 요소(110)를 찾기 위해 데이터 구조(101)에 대해 질의하기 위한 하나 이상의 경로 단계들을 포함하는 입력 경로식(104)을 수신하는 것을 포함한다. 입력 경로식(104)은 하나 이상의 경로 단계들을 포함한다. 이 방법은 데이터 구조(101)의 스키마(103)를 액세스하는 것 및 하나 이상의 요소(110)에 관한 정보를 획득하는 것을 포함한다. 경로식(104)은 경로 단계에 위치된 요소의 존재 갯수를 제한하기 위해 하나 이상의 경로 단계에 인덱스를 지정하도록 수정된다. 일 실시예에서, 입력 경로식을 수정하는 것은 임의의 와일드카드 기호를 확장하고 요소(110)의 하나 이상의 전체 경로를 지정하며, 두 개 이상의 전체 경로가 있다면 이것들은 합집합 연산자에 의해 조합되고, 수정된 경로식은 실행시 데이터 구조(101)에 대해 질의하기 위해 사용된다.

Description

데이터 구조를 항해하기 위한 방법 및 시스템{METHOD AND SYSTEM FOR NAVIGATION OF A DATA STRUCTURE}
본 발명은 데이터 구조를 항해(navigation)하는 분야에 관한 것이다. 특히, 데이터 구조에 대해 질의하기 하기 위해 경로식(path expression)을 이용하는 항해에 관한 것이다.
데이터 구조는 경로식을 사용함으로써 질의될 수 있다. 경로 언어, 예를 들어, XPath(XML 경로 언어)의 일부 변형을 사용하여 XML(extensible markup language) 데이터를 저장하고 이 데이터에 대해 질의할 수 있도록 하는 다수의 데이터베이스 시스템이 있다. XPath는 트리 데이터 구조에 대해 질의하는 W3C 표준 방식이다. XPath는 XML 데이터가 경로식에 기초하여 질의될 수 있도록 한다. 이 문서는 XPath 표현 및 질의어들을 나타내지만 다른 경로 언어로 된 다른 형태의 경로식을 포함하는 것으로 이해되어야 한다. 경로식은 XML 문서의 계층 구조를 통하여 경로를 지정하는 임의의 표현이다. 경로식에 의해 식별된 XML 문서의 부분은 경로식과 매치하는 임의의 경로의 끝에 있는 XML 문서의 구조 내에 상주하는 부분이다.
XML 문서는 흔히 문서 객체 모델(DOM;document object model) 구조 또는 트리로서 표현된다. 경로 질의는 이 모델 구조들을 횡단함으로써 평가되므로, 질의 최적화에 대한 필요요건은 횡단된 노드의 수를 효과적으로 감소시키는 것이다.
XML 스키마는 XML 문서의 정밀한 구조 형식을 정의한다. 이 스키마는 실행시간에 사용하지 못할 수 있다.
파싱된 DOM 트리에 대해서만 질의하고 문서의 스키마에 대한 액세스 권한을 갖지 않는 경로 런타임 엔진을 고찰해 보라. 사용자가 자유로운 형태의 경로식을 입력하는(즉, 경로 구축자를 통하지 않고) 저작도구(authoring tool)는 스키마에 대한 액세스 권한을 갖는다.
사용자가 XML 문서내의 임의의 요소(element)를 이 요소에 대한 전체 경로를 지정하지 않고 그 이름으로 찾을 수 있도록 하기 위한 자손(//) 경로 축(descendent(//) path axis)을 사용하는 것이 유익할 것이다. 그러나, 자손 경로 축은 런타임 엔진에 대해선 매우 비효율적인데, 이는 상기 요소의 모든 존재(occurrence)를 찾기 위해선 전체 DOM 트리를 횡단해야 하기 때문이다.
캘리포니아 대학(University of California at Davis) 컴퓨터 과학과의 April Kwong 및 Michael Gertz이 저술한 "Scema-based Optimization of XPath Expression"은 스키마로부터 생성된 경로 등가 클래스를 사용하는 XPath 표현(XPath Expression)의 최적화 방법을 개시한다. 이 최적화 방법은 XPath 표현에서 와일드카드의 확장을 포함한다.
본 발명은 데이터 구조를 항해하기 위한 방법 및 시스템을 제공하고자 한다.
본 발명의 제1 양상에 따라, 데이터 구조를 항해하기 위한 방법이 제공되는데, 이 방법은, 실행시 데이터 구조내의 하나 이상의 요소를 찾기 위해 데이터 구조에 대해 질의하기 위한 하나 이상의 경로 단계(path step)들을 포함하는 입력 경로식을 수신하는 것; 데이터 구조의 스키마를 액세스하고 하나 이상의 요소에 관한 정보를 획득하는 것; 경로 단계에 위치된 요소의 존재 갯수(number of occurrence)를 제한하기 위해 하나 이상의 경로 단계에 인덱스를 지정하도록 입력 경로식을 수정하는 것; 및 실행시 데이터 구조에 대해 질의하기 위해 수정된 입력 경로식을 이용하는 것을 포함한다.
본 발명의 제2 양상에 따라, 데이터 구조를 항해하기 위한 시스템이 제공되는데, 이 시스템은, 실행시 데이터 구조내의 하나 이상의 요소를 찾기 위해 데이터 구조에 대해 질의하기 위한 하나 이상의 경로 단계들을 포함하는 입력 경로식을 수신하기 위한 수단; 데이터 구조의 스키마를 액세스하고 하나 이상의 요소에 관한 정보를 획득하기 위한 수단; 경로 단계에 위치된 요소의 존재 갯수를 제한하기 위해 하나 이상의 경로 단계에 인덱스를 지정하도록 입력 경로식을 수정하기 위한 수단; 및 데이터 구조에 대해 질의하기 위해 실행시 사용을 위한 수정된 입력 경로식을 출력하는 수단을 포함한다.
본 발명의 제3 양상에 따라, 컴퓨터로 판독가능한 저장 매체에 저장된 컴퓨터 프로그램 제품이 제공되는데, 이 컴퓨터 프로그램 제품은, 실행시 데이터 구조내의 하나 이상의 요소를 찾기 위해 데이터 구조에 대해 질의하기 위한 하나 이상의 경로 단계들을 포함하는 입력 경로식을 수신하는 것; 데이터 구조의 스키마를 액세스하고 하나 이상의 요소에 관한 정보를 획득하는 것; 경로 단계에 위치된 요소의 존재 갯수를 제한하기 위해 하나 이상의 경로 단계에 인덱스를 지정하도록 입력 경로식을 수정하는 것; 및 실행시 데이터 구조에 대해 질의하기 위해 수정된 입력 경로식을 사용하는 것을 수행하기 위한: 컴퓨터로 판독가능한 프로그램 코드를 포함한다.
고가의 메모리 데이터 구조의 구성 및 베이스 테이블의 완전한 스캔을 초래하지 않고 경로 기반 질의가 XML 문서로부터 데이터를 검색하는 방법을 제공함으로써 경로 기반 질의에 대한 처리 시간을 개선시키는 솔루션이 바람직하게 제공된다. 질의내에서 요소의 반복에 관한 정보를 획득하여 사용하는 솔루션이 바람직하게 제공된다.
상기 설명한 방법 및 시스템은 데이터 구조내의 요소가 반복될 수 있고 반복이 있는지의 여부 및 얼마나 많은 반복이 있는지를 앎으로써 데이터 구조의 항해가 최적화 될 수 있는 기저 모델(underlying model)을 갖는 데이터 구조에 대해 질의할 수 있도록 한다.
본 발명은 바람직하게 본래 경로식을 취하고 스키마를 사용하여 이 경로식을 런타임 엔진에 의해 더욱 효과적으로 처리될 수 있는 형태로 변환한다. 스키마는 임의의 요소를 문서 루트까지 역방향으로 추적하는데에 필요한 정보를 포함하고, 따라서 그 요소에 대한 전체 경로를 생성할 수 있다. 이것은 바람직하게 런타임 엔진이 그 요소에 대해 "탐색(search)"하기 보단 그 요소로 직접 항해할 수 있도록 한다.
본 발명에 따르면 데이터 구조를 항해하기 위한 방법 및 시스템을 제공할 수 있다.
도 1A 및 1B는 본 발명의 일 실시예에 따른 시스템의 개략도이다.
도 2는 본 발명의 일 실시예가 구현될 수 있는 컴퓨터 시스템의 블록도이다.
도 3은 본 발명의 일 실시예에 따른 문서 구조의 개략도이다.
도 4는 본 발명의 일 실시예에 따른 일반적인 프로세스의 흐름도이다.
도 5는 본 발명의 일 실시예에 따른 예시적인 프로세스의 흐름도이다.
본 발명의 실시예는 이제 첨부 도면을 참고하여 단지 예시적으로 설명된다.
도 1A를 참조하면, 데이터 구조(101)는 데이터 구조(101)내의 하나 이상의 요소(110)를 찾기 위해 런타임 엔진(102)에 의해 질의된다.
데이터 구조(101)는, 예를 들어, 문서 객체 모델(DOM;document object model) 트리로 표현된다. 다른 예에서, 데이터 구조(101)는 유사한 트리 데이터 구조에 파싱된 비XML(non-XML) 데이터이다. 일 실시예에서, 데이터 구조(101)는 메시지 브로커에 의해 질의된다. 데이터 구조(101)는 연관된 스키마(103)를 갖는다.
경로식(104)은 하나 이상의 요소(110)를 찾기 위해 경로식(104)의 존재에 대해 데이터 구조(101)를 탐색하는 런타임 엔진(102)에 질의(111)로서 입력된다.
툴키트(105)는 질의(111)를 구조화하기 위해 사용되고 그후 질의는 런타임 엔진(102)에 배치된다. 설명된 시스템(100)에서, 툴키트(105)는 경로식(104)을 수정하기 위해 스키마(103)를 액세스한다.
질의되고 있는 데이터 구조(101)의 스키마(103)로부터의 정보를 사용하여, 경로식(104)은 질의되고 있는 요소(110)로의 전체 경로 및 기타 정보를 포함하도록 수정된다. 이것은 요소(110)를 탐색하기 보단 요소(110)를 추적하는데에 도움을 주며 따라서 런타임 엔진(102)의 효율을 증대시킨다. 또한, 스키마(103)가 질의되고 있는 요소(110)의 존재 갯수를 지시한다면, 런타임 엔진(102)은 그 특정한 요소(110)의 특정한 존재 갯수를 찾은 후에 정지할 수 있다.
도 1B를 참조하면, 경로식(104)이 입력되는 툴키트(105)의 상세한 모습이 나타나 있다. 스키마는 스키마 정보(120)를 획득하기 위해 참조된다. 수정자(121)는 질의 출력(122)을 제공하기 위해 스키마 정보(120)를 사용하여 경로식(104)을 수정한다. 질의 출력(122)은 데이터 구조에 대해 질의하기 위해 런타임 엔진에 의해 사용된다. 예를 들어, 스키마는 질의되고 있는 요소의 존재 갯수를 결정하기 위해 사용되고 이 정보는 그후 질의 출력(122)에 서술어(predicate)(101)를 추가하기 위해 수정자(121)에 의해 사용된다.
도 2를 참조하면, 툴키트(105)를 구현하기 위한 예시적인 시스템은 버스 시스템(203)을 통해 메모리 요소와 직접 또는 간접적으로 연결된 적어도 하나의 프로세서(201)를 포함하고 프로그램 코드를 저장 및/또는 실행하기에 적합한 데이터 처리 시스템(200)을 포함한다. 메모리 요소는 프로그램 코드의 실행 동안 채용된 로컬 메모리, 대용량 저장장치, 및 실행 동안 대용량 저장장치로부터 프로그램 코드가 검색되어야 하는 횟수를 감소시키기 위해 적어도 일부 프로그램 코드를 임시로 저장하는 캐쉬 메모리를 포함할 수 있다.
메모리 요소는 판독 전용 메모리(ROM)(204) 및 임의 접근 메모리(RAM)(205)의 형태의 시스템 메모리(202)를 포함할 수 있다. 기본 입력/출력 시스템(BIOS)(206)은 ROM(204)에 저장될 수 있다. 운영 체제 소프트웨어(208)를 포함하는 시스템 소프트웨어(207)는 RAM(205)에 저장될 수 있다. 소프트웨어 애플리케이션(210)도 RAM(205)에 저장될 수 있다.
시스템(200)은 또한 자기 하드 디스크 드라이브와 같은 주 저장 수단(211) 및 자기 디스크 드라이브 및 광학식 디스크 드라이브와 같은 부 저장 수단(212)을 포함할 수 있다. 드라이브 및 이것들과 연관된 컴퓨터로 판독가능한 매체는 시스템 (200)에 대한 컴퓨터로 실행가능한 명령어, 데이터 구조, 프로그램 모듈 및 기타 데이터에 대한 비휘발성 저장장소를 제공한다. 소프트웨어 애플리케이션은 주 저장 수단(211)과 부 저장 수단(212)뿐만 아니라 시스템 메모리(202)에 저장될 수 있다.
컴퓨팅 시스템(200)은 네트워크 어댑터(216)를 통해 하나 이상의 원격 컴퓨터로의 논리적 연결을 사용하여 네트워크를 이룬 환경에서 동작할 수 있다.
입력/출력 디바이스(213)는 직접 또는 중재 I/O 제어기를 통해 시스템에 연결될 수 있다. 사용자는 키보드, 포인팅 디바이스와 같은 입력 디바이스 또는 기타 입력 디바이스(예를 들어, 마이크로폰, 조이스틱, 게임 패드, 위성방송 수신용 접시형 안테나, 스캐너등)를 통해 명령 및 정보를 시스템(200)에 입력할 수 있다. 출력 디바이스는 스피커, 프린터등을 포함할 수 있다. 디스플레이 디바이스(214)는 또한 비디오 어댑터(215)와 같은 인터페이스를 통해 시스템 버스(203)에 연결된다.
경로 언어는 데이터 구조의 트리 표현(XML 문서와 같은)을 기초로 하고, 트리를 항해하는 능력으로서, 다양한 기준으로 노드를 선택하는 능력을 제공한다. 경로식은 하나의 노드로부터 다른 노드 또는 노드의 셋트로, 현재 "컨텍스트 노드"가 획득되도록 하기 위해 단계(step)들의 시퀀스로 기입된다. 이 단계들은 "/"(즉, 경로) 기호에 의해 분리된다. 각각의 단계는 3개의 성분들인, 축 지정자(axis specifier), 노드 테스트, 및 서술어(predicate)를 갖는다.
가장 간단한 경로는,
/A/B/C
와 같은 형태를 취하는데, 이는 데이터 구조의 최외각 요소를 형성하는 A 요소의 자식(children)인 B 요소들의 자식인 C 요소들을 선택한다.
더욱 복잡한 표현은 디폴트 '자식'축 이외의 축, 간단한 이름이외의 노드 테스트, 또는 임의의 단계 후에 대괄호안에 기입될 수 잇는 서술어를 지정함으로써 구성될 수 있다. 예를 들어, 경로식,
A//B/*[1]
은 현재 컨텍스트 노드의 자식(그에 대한 표현은 '/'로 시작되지 않음)인 A 요소의 자식 또는 또다른, 더 아래의 자손('//')인 B 요소의 자식 ('/')인, 그것의 이름('*')이 무엇이든 간에, 제1 요소('[1]')를 선택한다. 문서내에 여러 개의 적합한 B 요소들이 있다면, 이것은 실제로 B 요소들의 모든 제1 자식을 반환한다. 축 지정자는 데이터 구조를 표현하는 트리내에서 항해 방향을 지시한다.
임의의 복잡도를 지닌 표현은, 앞선(preceding) 노드가 경로식에 의해 매칭되기 전에 충족되어야만 하는, 서술어로서 대괄호내에서 지정될 수 있다. 한 단계내에서 서술어의 갯수에 대한 제한은 없으며, 서술어들은 경로에서 마지막 단계에한정될 필요는 없다. 서술어들은 임의의 깊이(depth)에 내포될 수 있다. 서술어에서 지정된 경로들은 현재 단계의 컨텍스트(즉, 바로 앞선 노드 테스트의 컨텍스트)에서 시작하며 그 컨텍스트를 변경하지 않는다. 모든 서술어는 발생할 매치에 대해 만족되어야만 한다. 서술어 순서는 중요하며 각각의 서술어는 찾기 단계들의 선택된 노드 셋트를 차례차례로 필터링한다.
XML 스키마는 XML 문서 유형의 서술(description)이고, 일반적으로는, XML 자체에 의해 부여된 기본 신택스 제약조건 이상 및 기본 신택스 제약조건을 넘는, XML 문서 유형의 문서의 내용 및 구조에 대한 제약조건(constraints)에 대해 표현된다. XML 스키마는 비교적 높은 추상화 레벨로 문서 유형의 모습(view)을 제공한다. 스키마는 또한 비XML 데이터 구조와 관련하여서도 사용딜 수 있다. 예를 들어, 문서 구조를 XML 스키마를 사용하고 그후 XSD(XML 스키마 정의) 주석을 사용하여 문서 구조를 모델링하여 각각의 요소의 실제 형식(physical format)을 설명한다.
XML 스키마를 표현하기 위해 특별하게 개발된 언어들이 있다. XML 규격((XML specification)에 고유한, 문서 유형 정의(DTD;Document Type Definition) 언어는 상대적으로 제한된 능력을 갖는 스키마 언어이지만, 또는 스키마의 표현을 제외하곤 XML에서 다른 용도를 갖는다. 두 개의 또다른 매우 일반적이고 더욱 표현력이 풍부한 XML 스키마 언어는 XML 스키마(W3C) 및 RELAX NG(REgular LAnguage for XML Next Generation)이다. XML 문서와 스키마를 연관시키기 위한 매커니즘은 스키마 언어에 따라 변동한다. 이 연관은 XML 문서 자체내의 마크업을 통해, 또는 일부 외부 수단을 통해 달성될 수 있다.
설명된 시스템에서, 경로식은 하기와 같이 3개의 가능한 방법으로 수정될 수 있다:
1. 스키마가 단 하나의 가능한 해결만을 제공하는 경우, 와일드카드 "*" 또는 자손 축(descendent axis) "//"의 간단한 확장;
2. 스키마가 하나 이상의 가능한 해결을 제공하는 경우, 와일드카드 "*" 또는 자손 축(descendent axis) "//"를 경로 합집합 연산자(path union operator) "|"와 조합된 다중 경로를 갖춘 표현으로의 확장;
3. 스키마가 요소를 제안하는 경우, 인덱스([1])의 삽입은 단 한번만 나타날 수 있다. 마찬가지로, 스키마가 요소를 제안하는 경우, [position()<=n]의 삽입은 n회-여기서, n > 1임- 나타날 수 있다.
예를 들기 위해, 제작된 예가 하기의 XML 문서를 사용하여 주어진다.
<?xml version="1.0" encoding="UTF-8"?>
<document>
<topic>
<list>
<item> ... </item>
<item> ... </item>
<item>...</item>
</list>
</topic>
<index>
<item>...</item>
<item> ... </item>
</index>
</document>
이 문서는 하기의 XML 스키마(XSD)에 의해 모델링될 수도 있다.
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="document">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="topic"/>
<xsd:element ref="index"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="topic">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="list"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="list">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" ref="item"/> </xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="item">
<xsd:complexType/>
</xsd:element>
<xsd:element name="index">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" ref="item"/> </xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
스키마는 각각의 요소 최소 및 최대의 존재 갯수를 포함하는 XML 문서의 허용가능한 구조를 설명한다. 스키마는 도 3에 도시된 문서 구조(스키마 트리)(300)를 표현한다.
도 3에 도시된 문서 구조(300)는 "문서"의 루트 노드(311)로부터 두 개의 가지(branch)(310,320)를 포함한다. 제1 가지(310)는 루트 노드(311)의 자식(child) 노드(312) "토픽(topic)"과, 자식 노드(314) "아이템(item)"를 가질 수 있는 자식 노드(313) "리스트(list)"를 포함한다. 제2 가지(320)는, 자식 노드(323) "아이템(item)"을 가질 수 있는, 루트 노드(311)의 자식 노드(322) "인덱스(index)"를 포함한다. "아이템(item)"인 노드(314,323)는 존재 갯수가 제로이거나 제로 보다 클 수 있다. 그 밖의 노드(311,312,313,322)는 1인 존재 갯수만을 가질 수 있다.
도 4를 참조하면, 흐름도(400)는 데이터 구조를 항해하기 위한 일반적인 프로세스를 나타낸다. 경로식은 데이터 구조내에서 하나 이상의 요소를 찾기 위해 입력된다(블록 401). 데이터 구조에 대한 스키마가 액세스되고 경로식의 요소에관한 정보가 획득된다(블록 402). 요소에 대한 최대 존재 갯수가 스키마로부터 참조되고, 존재 갯수를 제한할 필요가 있다면, 서술어가 경로식에 부가된다(블록 403). 하나 이상의 전체 경로식들이 획득되고 경로식들이 두 개 이상이면 조합된다(블록 404).
경로식은 요소에 관한 획득된 정보를 참조하여 수정된다. 수정된 경로식은 데이터 구조내에서 하나 이상의 요소를 찾기 위해 런타임 엔진에 출력된다(블록 405).
제작된 예에서, XPath 표현 '//item'이 주어지면, 도 5의 흐름도에 도시된 바와 같은 하기의 단계들이 자손 축 '//'을 확장시키고 "제1" 서술어'[1]' "만을 선택함"을 부가하기 위해 실행된다.
1. 초기 최적화된 표현 '/item'을 생성하기 위해 '/' 기호중의 하나를 제거한다(단계 501).
2. 'item'으로 명명된 요소를 탐색하기 위해 '선 깊이(depth first)' 방식으로 스키마 트리를 횡단한다(단계 502).
3. 요소가 발견되었는지에 대해 결정하고(단계 503), 발견되었으면 다음 단계로 진행하고, 발견되지 않았으면 프로세스는 종료한다(단계 504).
4. 제1 요소가 발견되었는지에 대해 결정한다(단계 505). 제1 요소가 발견되었으면, 다음 단계로 진행하고, 발견되지 않았으면 합집합 연산자를 이용하여 이전 표현에 부가한다(단계 506).
5. 'item' 요소가 발견되었을 때, 스키마에서 최대 존재(maxOccurs)' 속성을 조사한다(단계 507). 상기 속성이 '1'(이 속성이 없으면 디폴트로 설정됨)인지를 결정하고(단계 508), 속성이 '1'이면 서술어 '[1]'을 요소 이름에 부가한다(단계 509). 속성이 '1' 보다 크거나 '무한(unbounded)'이라면, 서술어를 부가하지 않는다(단계 510).
6. 현재 스키마 트리에서 현재 요소의 부모 노드로 간다(단계 511).
7. 부모가 루트 노드인지를 결정한다(단계 512). 부모가 루트 노드이면 또다른 'item' 요소를 탐색하기 위해 단계 502로 간다.
8. 부모가 루트 노드가 아니면, 스키마로부터 이름을 추출하여 '/' 분리기호에 의해 분리된 이전 단계의 앞에 삽입한다(단계 513).
9. 서술어를 필요에 따라 요소 이름에 추가하기 위해 단계 507로 가고 그후 다음 부모에게로 간다. '루트' 요소에 도달할 때 까지 프로세스를 계속한다.
10. 또다른 'item' 요소가 발견되면, 트리의 이 분기에 대한 또다른 최적화된 경로식을 생성한다. 생성된 경로식을 '|' 합집합 연산자에 의해 분리된 이전 표현에 부가한다(단계 506). 존재하는 더 이상의 'item' 요소가 스키마 트리에서 발견되지 않을 때 까지 횡단하는 것을 계속한다.
하기의 사항은 상기 설명한 단계들이 뒤따라 행해짐에 따라(본래의 표현 '//item', 상기 각각의 단계에서의 변경은 밑줄로 나타내었다) 최적화된 표현이 구축되는 것을 나타낸다.
ㆍ /item
ㆍ /list/item
ㆍ /list[1]/item
ㆍ /topic /list[1]/item
ㆍ /topic[l]/list[l]/item
ㆍ /document/topic[l]/list[l]/item
ㆍ /document[l]/topic[1]/list[1]/item
ㆍ /document[1]/topic[1]/list[1]/item|/ item
ㆍ /document[1]/topic[1]/list[1]/item |/index/item
ㆍ /document[1]/topic[1]/list[1]/item | /index[l]/item
ㆍ /document[1]/topic[1]/list[1]/item |/document /index[1]/item
ㆍ /document[1]/topic[1]/list[1]/item |/document[l]/index[1]/item
더욱 일반적인 경우에, 일반 원리는 XPath 표현을 통해 한번에 한 요소 단계씩 진행하는 것이고 임의의 와일드카드 '*'를 요소 이름으로 대체하고 자손 축 '//'을 완전히 한정된 경로로 대체하는 것이다. 하나 이상의 요소가 와일드카드와 매치한다면, 각각은 차례차례 고려된다. 후속하는 단계들은 특정한 매치가 유효한 경로를 초래할 수 없다는 것을 나타낼 수도 있는데, 이 경우엔 그 후속하는 단계는 폐기되어야 한다. 다수의 매치가 있을 수 있다면, XPath 합집합 연산자 '/'에 의해 분리된, 각각의 표현은 조합될 것이다.
표현 '*/topic//item'을 고려하자.
1. '스키마 커서'를 스키마 트리의 루트에 설정하고 'XPath 커서'를 본래 XPath 표현의 제1 단계에 설정한다.
2. 스키마 커서 위치로부터 선 깊이(depth first)로, 스키마 트리를 횡단한다.
3. 스키마 트리의 커서 위치가 XPath 단계와 매치한다면(와일드카드는 임의의 요소와 매치함), 그러면,
a. 요소 이름(와일드카드의 경우엔 스키마 트리로부터)을 최적화된 XPath 표현에 첨부한다.
b. 스키마에서 'maxOccurs' 속성을 조사한다. 이 속성이 '1'(이 속성이 존재하지 않으면 디폴트 속성임)이면, 서술어'[1]'을 요소 이름에 첨부한다. 이 속성이 '1' 보다 크면거나 '무제한(unbounded)'이면, 서술어를 첨부하지 않는다.
c. XPath 커서가 본래 XPath 표현에서 마지막 단계에 있으면, 커서를 재위치시킴(recursing)을 중단하고, 이 스테이지에서 구축된 새로운 표현을 부분 리스트에 추가하고 스테이지 2로부터 횡단하는 것을 계속한다.
d. XPath 커서를 본래 XPath 표현에서 다음 단계로 이동시킨다. 다음 단계가 자손 축'//'에 의해 분리되어 있으면,
i. 이것을 이전에 설명된 알고리즘을 사용하여 확장시킨다(확장 알고리즘에서의 '루트' 요소를 '//' 앞에 있는 요소이어야 하는 것으로 정의함)
ii. 확장한 결과가 합집합 연산자 '|'에 의해 분리된 다수의 경로를 초래한다면, 지금까지 최적화된 표현은 복제되어 각각의 부분의 시작부에 첨부되어야 한다. 각각의 부분은 이 알고리즘의 나머지에 대해 개별적으로 취급되어야 한다. (예를 들어, '/document//item'은 확장 되기 전에 '/document[1]//item'을 산출할 것이다. 이 커서 위치로부터 '//item'을 확장하는 것은 '/topic[1]/list[1]/item|/index[1]/item'을 산출할 것이다. 이 단계 후에, 각각이 개별적으로 취급되어야 하는, 두 개의 부분은 /document[1]/topic[1]/list[1]/item 및 /document[1]/index[1]/item로 될 것이다.
e. 스키마 커서의 각각의 자식에 대해, 차례차례로, 스키마 커서를 그 자식에 설정한다. 스테이지 3으로 재위치시킨다. (이 스테이지에서 각각의 자식은 최적화된 표현에서 개별 부분들을 표현하는데, 이 부분들의 대부분은 포기되거나 사장될 가능성이 있다. 알고리즘의 끝에서 나머지 부분들은 모두 합집합 연산자 '|'를 사용하여 조합된다.)
그렇지않으면,
a. 알고리즘이 스테이지 2에 있은 이후에 구축된 경로의 이 부분을 포기한다. 스키마 커서와 XPath 커서를 이전의 스테이지 2이었을 때 있었던 곳에 재설정한다. 스테이지 2로부터 횡단하는 것을 계속한다.
4. 최종 표현을 산출하기 위해 합집합 연산자 '|'에 의해 분리된 부분들의 리스트를 조합한다.
하기의 내용은 상기 설명한 단계들이 뒤이어짐에 따라 최적화된 표현의 구축을 나타낸다.(본래 표현 '*/topic//item", 각각의 단계에서의 변경은 밑줄로 나타내었다)
document
ㆍ document[l]
ㆍ document[1]/ topic
ㆍ document[1]/topic[l]
o / item
o /list /item
o /list[l]/item
ㆍ document[1]/topic[1/list [1]/ item
"//item"과 같은 표현이 입력되었을 때, 전체 데이터 구조는 이것에 대한 임의의 존재를 발견하기 위해 횡단되어야 한다. 그러나, 스키마를 참조함으로써 획득된 전체 경로식 "document/topic/list/item"을 지정함으로써 런타임 엔진이 아이템에 직접 항해할 수 있는 형태로 변환될 수 있다.
스키마가 상기 아이템이 반복하지 않는다는 것을 지정하면, 명시적인 인덱스는, 런타임 엔진이 제1 매치 예를 들어, "document[1]/topic[1]/list[1]/item"를 발견했을 때 탐색하는 것을 중지할 수 있다는 것을 알리기 위해 각각의 경로 단계에 위치될 수 있다. "item"은 반복하는 요소이지만, 이것의 조상 요소들은 반복하는 요소가 아님을 알아야 한다.
이름이 정해진 요소 "item"이 데이터 구조의 상이한 부분에 나타난다면, 이부분들은 합집합 연산자 '|'를 사용하여 조합될 수 있다. 예를 들어, "document[1]/topic[1]/list[1]/item|/document[1]/index[1]/item"이다. 이 마지막 표현은 주어진 스키마에 대해 본래의 "//item"에 등가이지만, 그 스키마에 대한 액세스 권한을 갖지 않는 런타임 엔진에 의해 더욱 효과적으로 처리될 수 있다.
요소가 소정 횟수 동안 예를 들어, 두 번 발생한다는 것을 스키마가 지정할 수 있도록 하는 것이 가능하다. XPath 단계 'element[2]'는 맨처음 두 개의 요소 보단 제2 요소를 반환할 것이다. 올바른 결과를 얻기 위해, [position()<=2]가 첨부되어야 한다. 종래의 시스템에서, 사용자는 런타임 엔진이 트리를 항해하여 모든 매칭하는 요소를 반환하도록 하고 싶어한다는 것을 지시하기 위해 "aaa/bbb"를지정한다. 때때로 반환할 요소가 단 하나만 있을 수 있지만 그럼에도 불구하고, XPath 파서는 전체 트리를 파싱해야 하고 따라서 다수의 불필요한 프로세싱을 수행한다. 사용자는 일정한 수의 요소 예를 들어 제1 요소만을 원할 수 있고 이것을 지시하기 위해 예를 들어 "aaa/bbb[1]"이 질의에 서술될 수 있다. 이전에, 파서는 완전한 리스트를 가져올 것이지만 사용자에게 요구되는 수를 반환하기 위해 셋트 다운을 내로우할 것이다.
설명된 시스템에서, 툴킷트는 질의되고 있는 요소의 존재 갯수를 결정하기 위해 사용되는 데이터 구조 스키마를 액세스한다. 이 정보는 그후 각각의 질의에 서술어를 추가하는데에 사용된다. 따라서, 단지 두 개의 요소 "aaa/bbb"만이 존재하고 사용자는 그러한 요소 모두에 대해 질의하고 있다고 결정된다면, 질의는 처음 두 개의 요소에 대해서만 조사하고 그후 파싱을 중지해야 한다는 것을 파서에 지시하도록 수정될 수 있다.
설명된 방법 및 시스템은 메시지에 대해 질의하는 메시지 브로커의 형태의 런타임 엔진을 포함하는 XML 프로세싱 제품 및 ESB(Enterprise Service Bus)에 적용될 수 있다.
이 방법은 또한 질의로서 사용자를 위한 수정된 경로식을 개선하기 위해 네트워크를 통해 서비스로서 클라이언트에 제공될 수 있다.
본 발명은 전체가 하드웨어인 실시예, 전체가 소프트웨어인 실시예, 또는 하드웨어 또는 소프트웨어 요소 양자 모두를 포함하는 일 실시예의 형태를 취할 수 있다. 바람직한 실시예에서, 본 발명은 펌웨어, 상주 소프트웨어, 마이크로코드등을 포함하지만 이에 한정되지 않는, 소프트웨어로 구현될 수 있다.
본 발명은 컴퓨터 또는 임의의 명령어 실행 시스템에 의한 사용을 위해 또는 이들과 연결하여 사용하기 위해 프로그램 코드를 제공하는 컴퓨터로 사용가능하거나 컴퓨터로 판독가능한 매체로부터 액세스할 수 있는 컴퓨터 프로그램의 형태를 취할 수 있다. 이 설명을 위한 목적으로, 컴퓨터로 사용가능하거나 컴퓨터로 판독가능한 매체는 명령어 실행 시스템, 장치 또는 디바이스에 의한 사용을 위해 또는 이들과 연결하여 사용하기 위해 프로그램을 포함하거나, 저장하거나 통신하거나 전파하거나 이송할 수 있는 임의의 장치일 수 있다.
상기 매체는 전자적, 자기적, 광학적, 전자기적, 적외선 또는 반도체 시스템(또는 장치 또는 디바이스) 또는 전파 매체일 수 있다. 컴퓨터로 판독가능한 매체의 예는 반도체 또는 고체 상태 메모리, 자성 테이프, 착탈식 컴퓨터 디스켓, 임의 접근 메모리(RAM), 판독 전용 메모리(ROM), 강체 자성 디스크 및 광학식 디스크를 포함한다. 현재의 광학식 디스크의 예로는 컴팩트 디스크 판독 전용 메모리(CD-ROM), 컴팩트 디스크 판독/기록(CD-R/W), 및 DVD를 포함한다.
개선 및 수정이 본 발명의 범위로부터 벗어나지 않고 상기 설명한 본 발명에 행해질 수 있다.
101;데이터 구조, 102; 런타임 엔진, 103;스키마
104;경로식, 105;툴킷트
110;요소, 111;질의
120; 스키마 정보, 121; 수정자, 122;질의 출력
201;프로세서, 202;시스템 메모리, 207;시스템 소프트웨어
210; 소프트웨어 애플리케이션
211;주 저장장치, 212;부 저장장치, 213;I/O 디바이스, 214;디스플레이
215;그래픽 카드, 216;네트워크 인터페이스

Claims (10)

  1. 데이터 구조(101)를 항해(navigation)하기 위한 방법에 있어서,
    실행시 데이터 구조(101)내의 하나 이상의 요소(110)를 찾기 위해 데이터 구조(101)에 대해 질의하기 위한 하나 이상의 경로 단계들을 포함하는 입력 경로식(input path expression)(104)을 수신하고;
    데이터 구조(101)의 스키마(103)를 액세스하고 하나 이상의 요소(110)에 관한 정보를 획득하고;
    경로 단계에 위치된 요소의 존재 갯수를 제한하기 위해 하나 이상의 경로 단계에 인덱스를 지정하도록 입력 경로식(104)을 수정하고;
    수정된 입력 경로식을 이용하여 실행시 데이터 구조(101)에 대해 질의(111)하는 것을 포함하는 것인, 데이터 구조(101)를 항해하기 위한 방법.
  2. 제1 항에 있어서, 입력 경로식(104)은 와일드카드 기호 또는 자손 축 중 하나 이상을 포함하는 것인, 데이터 구조(101)를 항해하기 위한 방법.
  3. 제1 항에 있어서, 입력 경로식(104)을 수정하는 것은 요소(110)의 하나 이상의 전체 경로를 지정하는 것을 포함하고, 두 개 이상의 전체 경로는 합집합 연산자에 의해 조합되는 것인, 데이터 구조(101)를 항해하기 위한 방법.
  4. 제1 항에 있어서, 하나 이상의 경로 단계에 인덱스를 지정하는 것은 인덱스의 서술어를 경로 요소 이름에 첨부하는 것인, 데이터 구조(101)를 항해하기 위한 방법.
  5. 제1 항에 있어서, 정보를 획득하는 것은 스키마(103)에서 속성의 최대 존재 갯수를 조사하고 이 속성이 존재하지 않거나 최대 존재 갯수가 1이면, 서술어 1을 경로 요소 이름에 첨부하는 것인, 데이터 구조(101)를 항해하기 위한 방법.
  6. 제1 항에 있어서, 스키마(103)는 데이터 구조(101)의 요소(110)를 이 요소의 루트까지 추적하기 위한 정보를 포함하는 것인, 데이터 구조(101)를 항해하기 위한 방법.
  7. 제1 항에 있어서, 입력 경로식(104)은 XPath 표현이고, 데이터 구조(101)는 연관된 스키마(103)를 구비한 문서 객체 모델 구조인 것인, 데이터 구조(101)를 항해하기 위한 방법.
  8. 데이터 구조(101)를 항해하기 위한 시스템에 있어서,
    제1 항 내지 제7 항 중 어느 한 항에 따른 방법의 각각의 단계들을 수행하는 수단들을 포함하는, 데이터 구조(101)의 항해를 위한 시스템.
  9. 제8 항에 있어서, 상기 시스템은 실행시 배치될 질의들을 구조화하는 툴키트(105)인 것인, 데이터 구조(101)의 항해를 위한 시스템.
  10. 컴퓨터상에서 실행될 때 제1 항 내지 제7 항 중 어느 한 항에 따른 방법을 수행하도록 구성된 프로그램 코드 수단들을 포함하는 컴퓨터 프로그램이 기록된 컴퓨터 판독가능한 기록매체.
KR1020107014912A 2008-01-15 2009-01-07 데이터 구조를 항해하기 위한 방법 및 시스템 KR101221306B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP08150284.1 2008-01-15
EP08150284 2008-01-15
PCT/EP2009/050120 WO2009090130A1 (en) 2008-01-15 2009-01-07 Method and system for navigation of a data structure

Publications (2)

Publication Number Publication Date
KR20100107463A KR20100107463A (ko) 2010-10-05
KR101221306B1 true KR101221306B1 (ko) 2013-01-11

Family

ID=40494930

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020107014912A KR101221306B1 (ko) 2008-01-15 2009-01-07 데이터 구조를 항해하기 위한 방법 및 시스템

Country Status (6)

Country Link
US (1) US8171040B2 (ko)
EP (1) EP2240875A1 (ko)
JP (1) JP5385919B2 (ko)
KR (1) KR101221306B1 (ko)
CN (1) CN101965565A (ko)
WO (1) WO2009090130A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102033885B (zh) 2009-09-29 2013-10-02 国际商业机器公司 用于XML数据存储库中的XPath执行的方法和系统
US8983990B2 (en) 2010-08-17 2015-03-17 International Business Machines Corporation Enforcing query policies over resource description framework data
US20120072824A1 (en) * 2010-09-20 2012-03-22 Research In Motion Limited Content acquisition documents, methods, and systems
US8566702B2 (en) * 2010-09-20 2013-10-22 Blackberry Limited Methods and systems of outputting content of interest
US10606814B2 (en) * 2017-01-18 2020-03-31 Microsoft Technology Licensing, Llc Computer-aided tracking of physical entities

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080059439A1 (en) 2006-08-30 2008-03-06 Lucent Technologies Inc. Query Translation from XPath to SQL in the Presence of Recursive DTDs

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3492247B2 (ja) * 1999-07-16 2004-02-03 富士通株式会社 Xmlデータ検索システム
US7831655B2 (en) * 2001-10-18 2010-11-09 Bea Systems, Inc. System and method for implementing a service adapter
US7478100B2 (en) 2003-09-05 2009-01-13 Oracle International Corporation Method and mechanism for efficient storage and query of XML documents based on paths
US7426522B2 (en) * 2003-09-23 2008-09-16 International Business Machines Corporation Object oriented query path expression to relational outer join translator method, system, article of manufacture, and computer program product
JP2007310617A (ja) * 2006-05-18 2007-11-29 Nec Corp 構造化文書処理システム、構造化文書処理方法およびプログラム

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080059439A1 (en) 2006-08-30 2008-03-06 Lucent Technologies Inc. Query Translation from XPath to SQL in the Presence of Recursive DTDs

Also Published As

Publication number Publication date
JP5385919B2 (ja) 2014-01-08
EP2240875A1 (en) 2010-10-20
US20090182722A1 (en) 2009-07-16
KR20100107463A (ko) 2010-10-05
WO2009090130A1 (en) 2009-07-23
JP2011510372A (ja) 2011-03-31
US8171040B2 (en) 2012-05-01
CN101965565A (zh) 2011-02-02

Similar Documents

Publication Publication Date Title
US20070208769A1 (en) System and method for generating an XPath expression
US8255394B2 (en) Apparatus, system, and method for efficient content indexing of streaming XML document content
US7627589B2 (en) High performance XML storage retrieval system and method
US8762410B2 (en) Document level indexes for efficient processing in multiple tiers of a computer system
US8935267B2 (en) Apparatus and method for executing different query language queries on tree structured data using pre-computed indices of selective document paths
US20060167869A1 (en) Multi-path simultaneous Xpath evaluation over data streams
US20040044659A1 (en) Apparatus and method for searching and retrieving structured, semi-structured and unstructured content
US20080306910A1 (en) Method and process for end users to query hierarchical data
US20110179085A1 (en) Using Node Identifiers In Materialized XML Views And Indexes To Directly Navigate To And Within XML Fragments
JP2008052662A (ja) 構造化文書管理システム及びプログラム
JP2001147933A (ja) 構造化文書検索方法、構造化文書検索装置及び構造化文書検索システム
JP2007226452A (ja) 構造化文書管理装置、構造化文書管理プログラムおよび構造化文書管理方法
US10242123B2 (en) Method and system for handling non-presence of elements or attributes in semi-structured data
KR101221306B1 (ko) 데이터 구조를 항해하기 위한 방법 및 시스템
US20080306928A1 (en) Method and apparatus for the searching of information resources
US7877400B1 (en) Optimizations of XPaths
JP3630062B2 (ja) 半構造化文書検索方法及び装置及び半構造化文書検索プログラムを格納した記憶媒体
JP2006031377A (ja) 構造化文書管理装置、検索装置、記憶方法、検索方法及びプログラム
US7805424B2 (en) Querying nested documents embedded in compound XML documents
CN1326078C (zh) 包装器的生成方法
JP2010267081A (ja) 情報検索方法及び装置及びプログラム
JP2007193642A (ja) XPath処理装置、XPath処理方法、XPath処理プログラム、および、記憶媒体
JP2008243075A (ja) 構造化文書管理装置及び方法
JP5374456B2 (ja) 文書検索装置の動作方法およびこれをコンピュータに実行させるためのコンピュータプログラム
Sun et al. Efficient evaluation of XML path queries with automata

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee