KR100756978B1 - 관계형 데이터베이스에서 xml 문서 검색을 위한 질의처리 시스템 및 방법 - Google Patents

관계형 데이터베이스에서 xml 문서 검색을 위한 질의처리 시스템 및 방법 Download PDF

Info

Publication number
KR100756978B1
KR100756978B1 KR1020050104253A KR20050104253A KR100756978B1 KR 100756978 B1 KR100756978 B1 KR 100756978B1 KR 1020050104253 A KR1020050104253 A KR 1020050104253A KR 20050104253 A KR20050104253 A KR 20050104253A KR 100756978 B1 KR100756978 B1 KR 100756978B1
Authority
KR
South Korea
Prior art keywords
node
xml document
clause
relational database
xml
Prior art date
Application number
KR1020050104253A
Other languages
English (en)
Other versions
KR20070047470A (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 정민경
Priority to KR1020050104253A priority Critical patent/KR100756978B1/ko
Publication of KR20070047470A publication Critical patent/KR20070047470A/ko
Application granted granted Critical
Publication of KR100756978B1 publication Critical patent/KR100756978B1/ko

Links

Images

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/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/20Natural language analysis
    • G06F40/205Parsing
    • G06F40/221Parsing markup language streams

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

관계형 데이터베이스에서 XML 문서 검색을 위한 질의 처리 시스템 및 방법이 개시된다. 본 발명의 XML 문서 검색을 위한 질의 처리 시스템은 XML 문서를 구성하는 적어도 하나의 요소를 파싱하는 XML 파서, 파싱한 상기 요소를 저장하는 관계형 데이터베이스, XML 문서 검색을 위한 질의어를 입력받아 추상구문트리로 변환하는 AST 변환기, 상기 추상구문트리를 SQL로 변환하는 SQL 변환기, 및 상기 관계형 데이터베이스에 대하여 상기 SQL로 질의를 수행하는 SQL 처리기를 포함한다. 이로써, XML 문서를 관계형 데이터베이스에 저장하고, 저장된 XML 문서에 대한 질의어를 SQL문으로 변환하여 처리할 수 있다.
XML, XPath, SQL, RDBMS

Description

관계형 데이터베이스에서 XML 문서 검색을 위한 질의 처리 시스템 및 방법{System and method for processing query for XML based in Relational Database}
도 1은 본 발명의 일 실시예에 따른 XML 질의 처리 시스템의 구성을 나타내는 기능 블럭도,
도 2a 및 도2b는 본 발명의 일 실시예에 따른 XML 질의 처리 방법을 설명하기 위한 도,
도 3a 및 도3b는 본 발명의 다른 실시예에 따른 XML 질의 처리 방법을 설명하기 위한 도,
도 4a 및 도 4b, 도 4c, 도 4d는 XML 질의어에 or 및/또는 and 연산자를 포함하는 경우 XML 질의 처리 방법을 설명하기 위한 도, 그리고
도 5는 본 발명의 일 실시예에 따른 XML 질의어를 SQL문으로 변환하는 방법을 설명하기 위한 도이다.
* 도면 주요부분에 대한 부호의 설명 *
100 : 관계형 데이터베이스 110 : XML 파서
120 : AST 변환기 130 : SQL 변환기
140 : SQL 처리기
본 발명은 관계형 데이터베이스에서 XML 문서 검색을 위한 질의 처리 시스템 및 방법으로서, 더욱 상세하게는 XML 문서를 관계형 데이터베이스에 저장하고, 저장된 XML 문서에 대한 질의어를 SQL문으로 변환하여 처리할 수 있는 시스템 및 방법에 관한 것이다.
XML(Extensible Markup Language)은 HTML(HyperText Markup Language)을 보완하기 위해 W3C(World Wide Web Consortium)에 의해 제안된 것으로 문서교환의 표준으로 자리잡고 있다. 이로 인해 XML 문서를 저장하고 검색할 수 있는 XML 전용 데이터베이스가 개발되고 있으며, 대용량의 XML 문서를 저장하고 검색하는 기술에 대한 연구가 진행되고 있다. 그러나, 그 성능이 20~30년 동안 기술적, 상업적으로 급속한 발전을 이룬 관계형 데이터베이스의 성능에는 아직 미치지 못하고 있다.
관계형 데이터베이스에 XML 문서를 저장하고 관리할 경우, 하나의 시스템상에서 XML 문서에 대한 질의도 같이 처리할 수 있게 된다. 또한, 지금까지 계속되어온 관계형 데이터베이스에 대한 연구, 예를 들면 질의 최적화, 질의 수행, 병행 제어, 회복 기법 등을 XML 문서에 대한 질의 처리 시에 그대로 이용할 수 있다. 또한, 관계형 데이터베이스는 거의 모든 단체나 기관에서 사용하고 있으므로 추가적인 비용이 들지 않는다.
이런 이유로 관계형 데이터베이스를 이용하여 XML문서를 저장하고 효율적으 로 검색하고자 하는 연구가 진행되고 있다. 다만, 관계형 데이터베이스는 구조적이며 테이블(table) 형태의 평평한 플랫폼을 나타내고 있으나, XML문서는 복잡한 반구조적 형태로 태그(tag)들이 일정한 순서를 유지하며 중첩되어 있다. XML문서에 대해 질의하는 XPath 식은 특정 엘리먼트를 검색하고 그것의 자식 노드를 검색하고, 또 다시 자식노드를 검색해 가는 반복적인 질의가 주를 이루고 있다. 반면, 관계형 데이터베이스에 대해 질의하는 SQL(Structured Query Language)문은 어떤 테이블의 컬럼 값을 비교하여 행 정보를 출력한다. 그러므로, XPath식을 구조적 형태의 관계형 테이블을 검색하는 SQL문으로 변환하여 처리하는 작업은 쉽지 않다.
본 발명은 상술한 문제점을 해결하기 위한 것으로, 본 발명의 목적은 XML 문서를 관계형 데이터베이스에 저장하고, 저장된 XML 문서에 대한 질의어를 SQL문으로 변환하여 처리할 수 있는 시스템 및 방법을 제공함에 있다.
상기 목적을 달성하기 위한 본 발명의 일 실시예에 따른 XML 문서 검색을 위한 질의 처리 방법은, XML 문서를 구성하는 적어도 하나의 요소를 추출하여 관계형 데이터베이스에 저장하는 단계, XML 문서 검색을 위한 질의어를 입력받아 추상구문트리로 변환한 후 SQL로 변환하는 단계, 및 상기 관계형 데이터베이스에 대하여 상기 SQL로 질의를 수행하여 결과를 출력하는 단계를 포함한다.
상기 관계형 데이터베이스는 XML 문서의 이름에 관한 정보를 포함하는 테이블, XML 문서 내의 경로에 관한 정보를 포함하는 테이블, XML 문서 내의 키워드들 에 관한 정보를 포함하는 테이블, XML 문서 내의 엘리먼트에 관한 정보를 포함하는 테이블, 및 XML 문서 내의 애트리뷰트에 관한 정보를 포함하는 테이블 중 적어도 어느 하나 이상을 포함하는 것이 바람직하다.
바람직하게는, 상기 엘리먼트에 관한 정보를 포함하는 테이블은, 상기 엘리먼트의 듀이 순서(Dewey Order) 값을 포함한다.
상기 질의어는, XPath식일 수 있다.
상기 변환하는 단계는, 상기 질의어를 추상구문트리 형태로 변환하는 단계, 상기 추상구문트리에서 결과노드(Output Node)를 검색하는 단계, 상기 추상구문트리를 깊이 우선 탐색하면서 각 노드의 타입에 대응하여 상기 관계형 데이터베이스에 있는 테이블을 이용하여 from절과 where절을 생성하는 단계, 및 상기 결과노드를 검색하는 select 절을 생성하여 상기 select절과 상기 from 절 및 상기 where절을 결합하는 단계를 포함하는 것이 바람직하다.
상기 결과노드를 검색하는 단계는, 상기 추상구문트리를 부모노드, 우측형제노드, 자식 노드 순으로 순회하면서 처음 만나게 되는, XML 문서의 태그 이름인 QName 타입을 검색하는 것이 바람직하다.
상기 from절과 where절을 생성하는 단계는, 상기 노드의 타입이 상기 XML문서 내의 엘리먼트의 순서를 나타내는 경우, 상기 엘리먼트의 듀이 순서 값을 기설정된 자릿수로 나타내어 수행하는 것이 바람직하다.
한편, XML 문서 검색을 위한 질의 처리 시스템은, XML 문서를 구성하는 적어도 하나의 요소를 파싱하는 XML 파서, 파싱한 상기 요소를 저장하는 관계형 데이터 베이스, XML 문서 검색을 위한 질의어를 입력받아 추상구문트리로 변환하는 AST 변환기, 상기 추상구문트리를 SQL로 변환하는 SQL 변환기, 및 상기 관계형 데이터베이스에 대하여 상기 SQL로 질의를 수행하는 SQL 처리기를 포함한다.
상기 관계형 데이터베이스는 XML 문서의 이름에 관한 정보를 포함하는 테이블, XML 문서 내의 경로에 관한 정보를 포함하는 테이블, XML 문서 내의 키워드들에 관한 정보를 포함하는 테이블, XML 문서 내의 엘리먼트에 관한 정보를 포함하는 테이블, 및 XML 문서 내의 애트리뷰트에 관한 정보를 포함하는 테이블 중 적어도 어느 하나 이상을 포함하는 것이 바람직하다.
상기 엘리먼트에 관한 정보를 포함하는 테이블은, 상기 엘리먼트의 듀이 순서(Dewey Order) 값을 포함하는 것이 바람직하다.
바람직하게는 상기 질의어는, XPath식일 수 있다.
상기 SQL 변환기는, 상기 추상구문트리에서 결과노드(Output Node)를 검색하고, 상기 추상구문트리를 깊이 우선 탐색하면서 각 노드의 타입에 대응하여 상기 관계형 데이터베이스에 있는 테이블을 이용하여 from절과 where절을 생성한 후, 상기 결과노드를 검색하는 select 절을 생성하여 상기 select절과 상기 from 절 및 상기 where절을 결합하는 것이 바람직하다.
이하 도면을 참조하여 본 발명을 상세하게 설명한다.
도 1은 본 발명의 일 실시예에 따른 XML 질의 처리 시스템의 구성을 나타내는 기능 블럭도이다. XML 질의 처리 시스템은 관계형 데이터베이스(100), XML 파서(110), AST 변환기(120), SQL 변환기(130) 및 SQL 처리기(140)를 포함한다.
XML 파서(Parser:110)는 입력받은 XML 문서를 각 요소로 파싱한다. 예를 들면, XML 파서(110)에는 Dom 이나 Sax 등과 같은 것이 있다.
관계형 데이터베이스(Relational Database : 100)는 설계된 테이블을 적어도 하나 이상 가지고 있다. 본 발명의 일 실시예에 따르면, 아래에서 설명한 바와 같이 5개의 테이블을 가질 수 있다. XML 파서(110)는 입력되는 XML문서를 파싱하여 파싱된 요소들을 관계형 데이터베이스(100)에 저장한다.
AST 변환기(120)는 사용자로부터 XML 검색을 위한 질의어를 입력받아 추상구문트리(AST)로 변환한다. SQL변환기(130)는 AST 변환기(120)에서 변환된 추상구문트리를 순회하면서 SQL문으로 변환한다. SQL처리기(140)는 관계형 데이터베이스(100)의 테이블에 대하여 SQL문을 종래대로 처리한다. 그 결과값은 소정의 디스플레이부(미도시)를 통해 사용자에게 출력될 수 있다. 이 때, 결과값을 다시 XML 형태로 변환하여 출력할 수도 있다.
이로써, 관계형 데이터베이스 환경에서 XML 문서를 관리하고, SQL문만이 아닌 XML 검색을 위한 질의어, 예를 들면 XQuery문까지 처리할 수 있으므로 하나의 통합된 시스템을 구축할 수 있게 된다.
이하, 본 발명에 따른 XML 질의 처리 방법을 설명한다.
먼저, 입력받은 XML 문서를 Dom 또는 SAX를 통해 파싱하여 각 구성요소, 예를 들면 엘리먼트(Element)나 애트리뷰트(Attribute) 등을 추출한다. 다음은 books.xml이라는 이름을 가진 XML 문서의 일 예이다. books.xml 문서를 참조하면, <bib>, <book>, <field>, <title> 등과 같이 마크업(Markup) 태그(<>)로 표시된 부 분, 즉 태그 이름이 엘리먼트에 해당하고, <book>이라는 엘리먼트에 추가된 'year'와 같이 엘리먼트에 포함되어 추가적인 정보를 제공하는 부분이 애트리뷰트에 해당한다.
<bib>
<book year="1994">
<field>Information Technology</field>
<title>TCP/IP Illustrated</title>
<author> <last> <email>Rive@hitachi.com</email> Stevens </last>
<first>W.</first>
</author>
<contents>
<subjects>TCP/IP Protocol</subjects>
<notion>The books are noted for their diagrams and clear and readable writing style.</notion>
</contents>
</book>
<book year="1992">
<field>Information Technology</field>
<title>Advanced Programming in the Unix environment</title>
<author> <last>Stevens <email>Rive@hitachi.com</email> </last>
<first>W.</first>
</author>
<contents>
<subjects>Unix System Programming</subjects>
<notion>For over a decade, serious programmers have relied on one book for practical.</notion>
</contents>
</book>
<book year="2000">
<field>Information Technology</field>
<title>Data on the Web</title>
<author> <last>Abiteboul <email>Glew@sds.no</email> </last>
<first>Serge</first>
</author>
<author> <last>Buneman <email>Suwanda@gmu.edu</email> </last>
<first>Peter</first>
</author>
<contents>
<subjects>Technologies for publishing structured documents on the Web</subjects>
<notion>Data on the Web" is the only comprehensive.</notion>
</contents>
</book>
</bib>
XML 문서에서 추출한 각 요소들을 관계형 데이터베이스에 있는 XML 색인 테이블에 저장한다. 다음은 본 발명의 일 실시예에 따라 설계된 XML 색인 테이블을 나타낸다. 본 발명은 비슷한 내용의 XML 문서들을 모아 하나의 컬렉션(Collection)이라는 논리적인 단위를 생성하여 관리한다. 즉, 여러 개의 XML 문서들을 쓰임새에 따라 일정하게 분류하여 효율적으로 관리한다.
테이블 이름 테이블 내 컬럼 이름
Collection_DOCUMENTS docid, docname
Collection_LOCATION docid, pathid, path, depth, path_cnt
Collection_WORD docid, eid, pathid, depth, position, word,
Collection_ATTRIBUTE docid, eid, aid, aname, avalue
Collection_ELEMENT docid, eid, name, pathid, sibord, pid, key_cnt, info, numbering, value
여기서, 테이블의 이름 중 'Collection' 부분은 각 컬렉션을 구별할 수 있는 이름을 사용할 수 있다. 예를 들면, 책에 관한 XML문서를 모아 놓은 컬렉션은 Book_DOCUMENTS, Book_LOCATION 등을 테이블의 이름으로 사용할 수 있고, 네트워크에 관한 XML문서를 모아 놓은 컬렉션은 Network_DOCUMENTS, Network_LOCATION 등을 테이블의 이름으로 사용할 수 있다.
여러 개의 XML 문서를 관계형 데이터베이스에 저장할 경우에는, 각 컬렉션 단위로 DOCUMENTS, LOCATION, WORD, ATTRIBUTE, ELEMENT 테이블이 생성되며 각각의 XML문서는 각 테이블마다 존재하는 docid 컬럼으로 구분한다.
이하, 각 테이블을 구성하고 있는 컬럼(column)들이 갖는 의미를 설명한다.
먼저, Collection_DOCUMENTS 테이블은 당해 컬렉션에 포함된 XML 문서의 이름(docname 컬럼)과 각 XML 문서를 구별하기 위한 고유한 식별자(docid 컬럼)를 포함하고 있다. 고유한 식별자는 일련의 순서 값(Sequential number)일 수 있다. 예를 들면, 다음과 같이 데이터베이스에 저장될 수 있다.
docid docname
1 books.xml
2 books1.xml
3 books2.xml
... ...
Collection_LOCATION 테이블은 XML 문서를 파싱하면서 발생한 노드들이 XML 문서 내에 위치한 경로(Path)에 대한 정보를 저장한다. docid 컬럼은 당해 XML 문서의 고유한 식별자를 나타내는 것으로 바람직하게는 Collection_DOCUMENTS 테이블에 저장된 docid 컬럼 값 중 하나이다. pathid 컬럼은 path 컬럼을 구별하기 위한 고유한 식별자를 나타내고, 고유한 식별자는 일련의 순서 값(Sequential number)일 수 있다.
path 컬럼은 XML 문서를 파싱하면서 발생한 노드들이 XML 문서 내에서 갖는 경로를 나타내는 것으로, 엘리먼트를 기준으로 정해진다. 엘리먼트는 <bib>, </bib>와 같이 시작태그와 끝태그로 표시되고, 그 사이에 엘리먼트의 내용이 포함된다. XML 문서 books.xml에서는 모든 엘리먼트를 포함하고 있는 <bib>가 루트 엘리먼트가 되므로, ~/bib라는 경로가 생성된다. <bib> 엘리먼트의 바로 밑에는 세 개의 <book> 엘리먼트들이 포함된다. 따라서, ~/bib~/book이라는 경로가 생성된다. <book> 엘리먼트의 바로 하위에는 <field> 및 <title>, <author>, <contents> 라는 엘리먼트가 있다. <author> 엘리먼트의 바로 하위에는 <last>와 <first>라는 엘리먼트가 있고, <last> 엘리먼트의 바로 하위에는 <email>이라는 엘리먼트가 있다. 이와 같은 경로를 아래 표에서의 path 컬럼처럼 저장한다.
여기서, 각 경로는 '~'문자와 '/'문자를 결합하여 나타낸다. XPath의 // 스텝(step)연산자를 관계형 데이터베이스 환경에서 처리할 경우 SQL의 like '~%/'연산으로 처리하는데, 이때 잘못된 엘리먼트들도 함께 출력될 수 있으므로 각 엘리먼트들의 경로를 저장할 때부터 '~'문자와 결합하여 저장한다. 예를 들면, doc('books.xml')//book//title을 처리할 경우, '~%/book~%/title'로 변환하여 처리함으로써 books 혹은 bookmark와 같은 잘못된 엘리먼트들이 출력되는 것을 막기 위함이다.
depth 컬럼은 각 경로의 레벨 즉, 깊이를 나타낸다. 그러므로, ~/bib의 깊이(depth)는 1이 되고, ~/bib의 바로 하위에 있는 ~/bib~/book의 깊이는 2가 된다. path_cnt 컬럼은 각 경로가 당해 XML 문서에 나타나는 횟수를 의미한다. 따라서, ~/bib~/book 경로는 books.xml문서에서 3번 나타남을 의미한다.
docid pathid path depth path _ cnt
1 1 ~/bib 1 1
1 2 ~/bib~/book 2 3
1 3 ~/bib~/book~/field 3 3
1 4 ~/bib~/book~/title 3 3
1 5 ~/bib~/book~/author 3 3
1 6 ~/bib~/book~/author~/last 4 3
1 7 ~/bib~/book~/author~/last~/email 5 3
1 8 ~/bib~/book~/author~/first 4 3
1 9 ~/bib~/book~/contents 3 3
1 10 ~/bib~/book~/contents~/subjects 4 3
1 11 ~/bib~/book~/contents~/notion 4 3
... ... ... ... ...
Collection_WORD 테이블은 XML 문서 내에 있는 주요 키워드(Keyword)들의 정보를 저장한다. word 컬럼은 XML 문서 내에 있는 텍스트(Text)들 중 불용어를 제거하고 검색에 사용될 수 있는 주요 키워드들을 나타낸다. XML 문서 books.xml에서 첫 번째 책의 분야(field)는 'Information Technology'이므로, 키워드는 'Information' 및 'Technology', 'Information Technology' 중 어느 하나가 될 수 있다.
docid 컬럼은 당해 키워드가 있는 XML 문서의 고유한 식별자를 나타내는 것으로 바람직하게는 Collection_DOCUMENTS 테이블에 저장된 docid 컬럼 값 중 하나이다. eid 컬럼은 당해 키워드가 위치한 엘리먼트의 고유한 식별자를 나타내는 것으로 바람직하게는 Collection_ELEMENT 테이블에 저장된 eid 컬럼 값 중 하나이다. pathid 컬럼은 당해 키워드가 위치한 경로의 고유한 식별자를 나타내는 것으로 바람직하게는 Collection_LOCATION 테이블에 저장된 pathid 컬럼 값 중 하나이다. depth 컬럼은 당해 키워드가 위치한 엘리먼트의 깊이로 바람직하게는 Collection_LOCATION 테이블에 저장된 depth 컬럼 값 중 하나이다. position 컬럼은 당해 키워드가 당해 엘리먼트의 내용에서 몇 번째 위치한 키워드인지를 나타낸다. 예를 들면, 키워드 'Information'은 <field> 엘리먼트의 내용인 'Information Technology' 중 첫 번째이고, 키워드 'Technology'는 <field> 엘리먼트의 내용인 'Information Technology' 중 두 번째에 위치한다.
docid eid pathid depth position word
1 3 3 3 1 Information
1 3 3 3 2 Technology
1 4 4 3 1 TCP/IP
1 4 4 3 2 Illustrated
1 7 7 5 1 Rive@hitachi.com
1 6 6 4 1 Stevens
1 8 8 4 1 W.
1 10 10 4 1 TCP/IP
1 10 10 4 2 Protocol
1 11 11 4 1 books
1 11 11 4 2 noted
... ... ... ... ... ...
Collection_ATTRIBUTE 테이블은 XML 문서 내에 있는 애트리뷰트(Attribute)에 관한 정보를 저장한다. aname 컬럼은 XML 문서 내에 있는 애트리뷰트의 이름을 나타내고, avalue 컬럼은 당해 애트리뷰트의 내용을 나타낸다. XML 문서 books.xml에서 첫 번째 <book> 엘리먼트에 포함되어 추가적인 정보를 제공하는 'year' 애트리뷰트의 내용은 '1994'가 된다.
docid 컬럼은 당해 애트리뷰트가 있는 XML 문서의 고유한 식별자를 나타내는 것으로 바람직하게는 Collection_DOCUMENTS 테이블에 저장된 docid 컬럼 값 중 하나이다. eid 컬럼은 당해 애트리뷰트가 포함되어 있는 엘리먼트의 고유한 식별자를 나타내는 것으로 바람직하게는 Collection_ELEMENT 테이블에 저장된 eid 컬럼 값 중 하나이다.
aid 컬럼은 1개의 엘리먼트가 여러 개의 애트리뷰트를 가질 때, 이들을 구별하기 위해 각 애트리뷰트마다 부여된 고유한 식별자이다. 고유한 식별자는 일련의 순서값일 수 있다. 예를 들면, <book year="1994" month="10" day="12">와 같이 book 엘리먼트가 3개의 애트리뷰트를 가질 경우, 같은 엘리먼트 하에 있는 year의 aid 컬럼값은 1, month의 aid 컬럼값은 2, day의 aid 컬럼값은 3일 수 있다. 아래 의 표는 위의 XML 문서에 대한 Collection_ATTRIBUTE 테이블을 나타낸다.
docid eid aid aname avalue
1 2 1 year 1994
1 12 1 year 1992
1 22 1 year 2000
Collection_ELEMENT 테이블은 XML 문서 내에 있는 엘리먼트(Element)에 관한 정보를 저장한다. name 컬럼은 XML 문서 내에 있는 엘리먼트의 이름을 나타내고, value 컬럼은 당해 엘리먼트의 내용을 나타낸다. eid 컬럼은 엘리먼트를 구별하기 위한 고유한 식별자를 나타내고, 고유한 식별자는 일련의 순서 값(Sequential number)일 수 있다. XML 문서 books.xml에서 <bib>, <book>, <field> 다음에 위치한 네 번째 엘리먼트의 이름은 title이고, 그 내용은 'TCP/IP Illustrated'이다.
docid 컬럼은 당해 엘리먼트가 있는 XML 문서의 고유한 식별자를 나타내는 것으로 바람직하게는 Collection_DOCUMENTS 테이블에 저장된 docid 컬럼 값 중 하나이다. pathid 컬럼은 당해 엘리먼트가 위치한 경로의 고유한 식별자를 나타내는 것으로 바람직하게는 Collection_LOCATION 테이블에 저장된 pathid 컬럼 값 중 하나이다.
pid 컬럼은 당해 엘리먼트의 부모 엘리먼트의 eid 컬럼 값을 나타낸다. 예를 들면, <title> 엘리먼트의 부모 엘리먼트는 <book>이므로, <title> 엘리먼트의 pid 컬럼 값은 <book> 엘리먼트의 eid 컬럼 값인 2가 된다. sibord 컬럼은 같은 부모 엘리먼트의 바로 하위에 있는 자식 엘리먼트들, 즉 형제 엘리먼트들 간의 일련의 순서를 나타낸다. 예를 들면, <field> 및 <title>, <author>, <contents> 엘리먼트들은 <book> 엘리먼트의 자식 엘리먼트에 해당하는 것으로, 각 엘리먼트의 sibord 컬럼 값은 1, 2, 3, 4가 된다.
info 컬럼은 당해 엘리먼트의 내용이 어떤 엘리먼트 다음에 위치하는지를 나타낸다. 예를 들면, <field> 엘리먼트의 내용인 'Information Technology'는 <field> 다음에 위치하므로, info 컬럼 값은 <field> 엘리먼트의 eid 컬럼 값인 3이 된다. 그러나, <last> 엘리먼트의 내용인 'Stevens'는 <last> 다음에 위치하지 않고, <email>...</email> 다음에 위치하므로, info 컬럼 값은 <email> 엘리먼트의 eid 컬럼 값인 7이 된다. 해당 엘리먼트의 내용이 위치하는 위치 정보를 보다 정확하게 나타내기 위함이다. key_cnt 컬럼은 당해 엘리먼트의 내용 중 Collection_WORD 테이블에 저장된 키워드의 개수를 나타낸다. <title> 엘리먼트의 내용인 'TCP/IP Illustrated'는 'TCP/IP'와 'Illustrated', 두 개의 키워드로 저장되었으므로, key_cnt 컬럼 값은 2가 된다.
numbering 컬럼은 루트 엘리먼트로부터 출발하여 각 엘리먼트에 이르기까지 순서(Order) 값들을 특정 구분자를 기준으로 표현한다. 예를 들면, 루트 엘리먼트인 <bib>는 '#1#'으로 표현할 수 있다. 그의 첫 번째 자식 엘리먼트 <book>은 '#1#1#'로, 그의 두번째 자식 엘리먼트 <book>은 '#1#2#'로 표현할 수 있다. 또한, eid 컬럼 값이 2인 <book> 엘리먼트의 듀이 순서(Dewey Order) 값은 '#1#1#'이므로, 그의 첫 번째 자식 엘리먼트 <field>는 '#1#1#1#'로, 두 번째 자식 엘리먼트 <title>은 '#1#1#2#'로, 세 번째 자식 엘리먼트 <author>는 '#1#1#3#'으로, 네 번째 자식 엘리먼트 <contents>는 '#1#1#4#'로 표현할 수 있다. 여기서 '#'문자는 자신의 순서 값과 부모 엘리먼트의 순서 값을 구별하기 위해 사용된다. numbering 컬 럼은 부모 엘리먼트의 순서 값과 형제 엘리먼트들 간의 순서 값을 포함하는 듀이 순서(Dewey Order) 값을 사용함으로, 각 엘리먼트의 위치를 쉽게 파악할 수 있는 것이 특징이다. 즉, eid 컬럼과 같이 각 노드의 절대적인 위치를 나타내는 글로벌 순서(Global Order) 값을 사용하는 경우와 달리, 자신의 numbering 컬럼을 통해 부모 노드 또는 자식노드, 형제노드를 한번에 알 수 있다. 이러한 듀이순서(Dewey Order) 값을 사용함으로써, 후술할 Xpath 식을 SQL문으로 변환하는 성능을 높일 수 있다.
docid eid ename pathid sibord pid key _ cnt info numbering value
1 1 bib 1 1 0 0 1 #1#
1 2 book 2 1 1 0 2 #1#1#
1 3 field 3 1 2 2 3 #1#1#1# Information Technology
1 4 title 4 2 2 2 4 #1#1#2# TCP/IP Illustrated
1 5 author 5 3 2 0 5 #1#1#3#
1 6 last 6 1 5 1 7 #1#1#3#1# Stevens
1 7 email 7 1 6 1 7 #1#1#3#1#1# Rive@hitachi.com
1 8 first 8 2 5 1 8 #1#1#3#2# W.
1 9 contents 9 4 2 0 9 #1#1#4#
1 10 subjects 10 1 9 2 10 #1#1#4#1# TCP/IP Protocol
1 11 notion 11 2 9 7 11 #1#1#4#2# The books are noted for...
1 12 book 2 2 1 0 12 #1#2#
... ... ... ... ... ... ... ... ... ...
이상 설명한 테이블의 이름 및 각 테이블을 구성하고 있는 컬럼들의 이름과 각 테이블 내에서의 컬럼들의 순서는 달라질 수 있다. 또한, 아래에서 설명할 XML 검색을 위한 질의어를 SQL문으로 변환하여 질의를 처리함에 있어 필요한 컬럼은 위에서 설명한 테이블을 기초로 당업자가 구성할 수 있다.
사용자로부터 XML 문서를 검색할 수 있는 질의어를 입력받은 경우, 위에서 설계한 테이블들을 이용하여 XML 검색 질의어를 SQL문으로 변환한다. XML 문서를 검색할 수 있는 질의어인 XPath식은 W3C Working Group에서 제안한 XPath 표준에 따른다. XPath식은 XML 문서 상에 존재하고 있는 엘리먼트나 애트리뷰트, 텍스트 등을 참조하기 위해 사용된다. XPath식의 구문은 다음과 같이 정의하여 사용된다.
XPath ::= Absolute_Expression | Relative_Expression
| Complex_Expression
Node_Test ::= QName | '@' QName
Predicate ::= [Complex_Type]
Complex_Type ::= Index_Number_Type | Comparison_Type
Index_Number_Type ::= Number
Equal_Op ::= '='
Relation_Op ::= 'or' | 'and'
Keyword_F ::= contains()
Document_F ::= doc()
Comparison_Type ::= Keyword_F 'Literal_String'
| Node_Test Equal_Op 'Literal_String'
| Comparison_Type Relation_Op Comparison_Type
Absolute_Expression ::= Document_F '/' Node_Test
| Absolute_Expression '/' Node_Test
Relative_Expression ::= Document_F '//' Node_Test
| Absolute_Expression '//' Node_Test
| Relative_Expression '//' Node_Test
Complex_Expression ::= Absolute_Expression Predicate
| Relative_Expression Predicate
| Complex_Expression Absolute_Expression
| Complex_Expression Relative_Expression
위의 구문을 살펴보면, 경로를 나타내는 방식에는 루트 엘리먼트로부터 시작하여 특정 엘리먼트까지 방문한 엘리먼트들을 '/' 스텝(Step) 연산자를 이용하여 모두 기술하는 절대 경로방식과 사용자에 의해 선택된 특정 엘리먼트부터 다른 특정 엘리먼트까지의 경로를 '//' 스텝 연산자를 이용하여 축약하여 기술하는 상대 경로방식이 있다. 즉, '/'는 특정 엘리먼트의 자식노드를 나타내고, '//'는 특정 엘리먼트의 자식노드 또는 후손노드를 나타낸다.
QName은 XML 문서상의 태그 이름을 나타낸다. 따라서, QName은 엘리먼트를 나타내고 '@' QName은 애트리뷰트를 나타낸다.
이하 사용자로부터 입력받은 XPath식을 SQL문으로 변환하는 방법을 도 5를 참조하여 설명한다.
먼저, S500단계에서는 XPath 식을 추상구문트리(Abstract Syntax Tree : AST) 형태로 변환한다. 즉, XPath식을 구문분석하여 각 토큰으로 분리하고 이를 트리형태로 변환한다. 본 발명에서 XPath식을 AST로 변환하는 것은 eXist라는 XML 전용 데이터베이스의 파서(Parser)의 일부분을 이용한다. AST는 자식노드와 형제노드 만을 가지며 그 형태는 LISP 언어의 형태와 유사하게 표시된다. 예를 들면, 아래의 XPath 1식을 AST 형태로 변환하면 AST 1과 같다. AST 1을 도시하면 도 2a와 같다.
[XPath 1]
doc('books.xml')//book[title='Data on the Web']//subjects[contains (text(),'Web')]
[AST 1]
(//(//(doc books.xml) book (Pred (= title Data on the Web))) subjects (Pred (contains text() Web)))
여기서, 'Pred'는 XPath식의 구문 중 Predicate을 의미하는 것으로 조건을 나타낸다.
S510단계에서는, AST에서 결과노드(Output Node)를 검색한다. XPath 1식은 books.xml문서에서 <title> 엘리먼트가 'Data on the Web'인 <book> 엘리먼트의 하위 엘리먼트 중 그 텍스트에 'Web'이 포함되어 있는 <subjects> 엘리먼트를 찾으라는 의미가 된다. 즉, XPath 1식은 특정한 조건을 만족하는 <subjects> 엘리먼트를 검색하는 것으로, 이 <subjects> 엘리먼트가 XPath 1식의 결과노드가 된다.
이러한 결과노드(Output Node)를 찾는 방법은 다음과 같다. AST의 루트 노드부터 부모노드 - 우측형제노드 - 자식노드 순으로 순회하면서 처음 만나게 되는 QName 타입의 노드가 결과노드가 된다. 이 결과노드를 특정 변수에 저장한다. 도 2a를 참조하면, 루트 노드(200)에서 출발하여, 루트 노드(200)의 우측형제노드가 없으므로, 자식노드(201)를 탐색한다. 자식노드(201)가 QName 타입이 아니므로, 그 (201)의 우측형제노드(209)인 'subjects'를 만난다. subjects노드(209)는 처음 만나는 QName 타입의 노드이므로 XPath 1식의 결과노드가 된다. 결과노드인 'subjects'를 특정 변수에 저장한다.
S520단계에서는, AST를 깊이 우선 탐색(Depth-first-search)하면서 각 노드의 타입별로 적절한 SQL문을 생성한다. 여기서 생성되는 SQL문은 from절과 where절이고, 각 타입에 따라 다른 구문들이 추가될 수 있다. 깊이 우선 탐색은 AST의 루트노드부터 시작하여 자식노드가 있으면 계속 내려가면서 탐색한다. 더 이상 자식노드가 없으면 형제노드를 탐색한다. 예를 들면, AST 1을 깊이 우선 탐색하면 도 2a에서의 참조 번호(Reference number)순으로 각 노드를 탐색하게 된다. 즉, 200번에서 213번까지 순서대로 탐색하게 된다. AST를 순회하면서 수행하는 SQL문 변환작업을 각 노드의 타입별로 살펴본다.
'//' 또는 '/'와 같은 스텝(step) 연산자를 만날 경우(S520-1)에는, 스택(stack)이라는 자료구조에 이를 푸쉬(push)한다.
QName 타입의 노드를 만날 경우(S520-2)에는, from절에 삽입될 테이블의 별명(Alias)을 부여하기 위해 -1로 초기화된 rename변수 값을 1 증가시킨다(S520-2-1).
그 다음, 이전까지 생성한 경로에 추가 경로를 결합시켜 새로운 경로를 생성한다(S520-2-2). 스택(stack)을 팝(pop)하여 얻은 값이 '//'일 경우에는 '~%/'을, '/'일 경우에는 '~/'을, 당해 QName 타입의 노드와 결합시킨 것이 추가 경로(path)가 된다. 다만, QName 타입이 '//'나 '/'와 같이 경로를 지정하는 스텝 연산자의 다음에 위치하지 않는 경우에는 스택을 팝(pop)하지 않고, 경로를 생성한다. 예를 들어, XPath 1식에서 <book> 엘리먼트와 <subjects> 엘리먼트는 스텝 연산자 '//' 다음에 위치하나, <title> 엘리먼트는 조건을 나타내는 Predicate('[') 다음에 위치한다. <title> 엘리먼트는 XPath식에서 경로를 지정하는 스텝 연산자를 동반하지 않는 경우이므로, 스택에 푸쉬(pust)한 연산자가 없다. 그러므로, 스택(stack)을 팝(pop)하지 않고, <book> 엘리먼트의 경로에 <title> 엘리먼트의 경로를 추가하면 된다. 즉, book노드(204)에서 생성한 경로(Path)에 '~/'와 'title'을 결합하여 경로(path) ~%/book~/title을 생성한다.
QName 타입의 노드가 S510 단계에서 검색한 결과노드와 일치하고 스택(stack)이 비어 있을 경우에는, 다음과 같은 SQL문을 생성한다(S520-2-3).
from절 : Collection_ELEMENT E1, Collection_LOCATION L1
where절: L1.path like 'AST를 순회하면서 생성한 경로'
and E1.docid = L1.docid
and E1.pathid = L1.pathid
여기서 숫자 1은 S520-2-1 단계에서 증가된 rename 변수의 값의 일 예로 from절에 삽입될 테이블의 별명(Alias)을 나타낸다. 이 결과노드에서 테이블의 별명(Alias) 값을 저장하여 S530단계에서 select절을 생성하는데 이용한다.
QName 타입의 노드가 S510 단계에서 검색한 결과노드와 일치하지 않고 스택(stack)이 비어 있지 않을 경우에는, S520-2-1과 S520-2-2단계만을 수행한다.
Predicate 타입의 노드를 만난 경우(S520-3)에는, 그 때까지 생성한 경로 (path)로 다음과 같은 SQL문을 생성한다(S520-3-1). 다만, Predicate 타입의 노드 앞에 있는 QName 타입의 노드에서 SQL문을 생성한 경우에는 중복되므로 이 단계에서는 SQL문을 생성하지 않는다.
from절: Collection_ELEMENT E1, Collection_LOCATION L1
where절: L1.path like 'AST를 순회하면서 생성한 경로'
and E1.docid = L1.docid
and E1.pathid = L1.pathid
Predicate의 자식 노드가 숫자 타입인 경우에는, rank() 함수와 fixed_digit() 함수를 이용하여 inline_view라는 임시 테이블을 생성하는 구문을 from절에 추가하고, where절에는 아래와 같은 구문을 추가한다(S520-3-2). 도 3a에 있는 XPath 식을 예로 들어 설명한다.
[XPath 2]
doc('books.xml')//book[2]/author[last='Stevens']
[AST 2]
(/(//(doc books.xml) book (Pred 2)) author (Pred (= last Stevens)))
변환된 AST 2를 살펴보면 Pred 노드(305) 아래에 2라는 숫자 타입의 노드(306)가 위치하게 된다. S520-3-2 단계에서 추가되는 구문은 아래와 같다.
from절: (select E0.docid, E0.eid,
rank() over(order by fixed_digit(E0.numbering)) rank
이전까지 생성한 SQL문 ) inline_view
where절: inline_view.rank = 2
여기서 2는 Pred 타입의 자식노드(306)이다. 여기서 rank()함수는 기존의 관계형 데이터베이스에서 제공하는 것으로, 정해진 컬럼에서 각 컬럼값이 갖는 순위를 계산하는 함수이다. rank() over(order by fixed_digit(E0.numbering)) rank 구문은 numbering 컬럼을 기준으로 정렬하여 각 numbering 컬럼값이 갖는 순위를 rank() 함수로 계산하고, 이 순위를 rank 컬럼의 값으로 넣으라는 의미이다. 기존의 함수 rank()를 사용하지 않고, 순위를 계산하는 함수를 별도로 구현할 수도 있다.
fixed_digit() 함수는 XML 문서상에서의 각 엘리먼트의 정확한 순서를 부여하기 위해 본 발명에서 설계한 함수이다. fixed_digit(parameter) 함수는 parameter 값을 각각 5자리의 수로 나타낸다. 예를 들어, '#1#3#2#'와 '#1#123#4#'를 정렬하면 '#1#3#2'가 XML 문서상 앞에 위치함에도 불구하고 넷째 자리에 있는 '3'과 '1'을 비교하여, '#1#123#4'가 우선 순위를 가지게 된다. 사전식 순서대로 비교하기 때문이다. 이는 기존의 듀이 순서(dewey Order) 방식의 단점으로, 듀이 순서 값을 기준으로 그대로 정렬할 경우에는, 특정 순서에 해당하는 엘리먼트를 정확히 찾을 수 없다.
그러므로, fixed_digit() 함수를 이용하여 ELEMENT 테이블의 numbering 컬럼 값을 각각 5자리의 수로 나타낸다. 예를 들어, '#1#3#2#'는 fixed_digit() 함수를 통해 000010000300002으로 인코딩되고, '#1#3#2#1'은 fixed_digit() 함수를 통해 00001000030000200001로 인코딩된다. 또한, '#1#123#4#'는 fixed_digit() 함수를 통해 000010012300004로 인코딩된다. 따라서, '#1#3#2#'이 '#1#123#4#'보다 앞에 위치하는 것으로 바르게 정렬된다. 여기서 기존의 듀이 순서(dewey Order)값을 5자리로 표현한 것은 1개 엘리먼트의 직계 자식 노드가 최대 99999개인 XML문서를 처리할 수 있음을 의미한다. 그러므로, fixed_digit() 함수의 자리 수는 엘리먼트의 직계 자식 노드의 개수에 따라 다르게 정의할 수 있다.
텍스트(Text) 타입의 노드를 만날 경우(S520-4)에는 그때까지 생성한 경로(path)로 다음과 같은 SQL문을 생성한다(S520-4-1).
from절: Collection_ELEMENT E1, Collection_LOCATION L1
where절: L1.path like 'AST를 순회하면서 생성한 경로'
and E1.docid = L1.docid
and E1.pathid = L1.pathid
또한, 당해 텍스트 타입의 노드와 그의 좌측 형제 노드 사이에 소정의 연산을 수행하는 구문을 where절에 추가한다(S520-4-2). 도 2a에서 텍스트 타입의 노드인 Data on the Web 노드(208)를 예로 들면, 그(208)의 좌측 형제 노드인 title 노드(207)와 '='(206) 연산을 수행하는 구문을 아래와 같이 추가한다. 즉, title 노드가 QName 타입이므로, ELEMENT 테이블의 value 컬럼 값이 'Data on the Web'인 조건을 where절에 추가한다.
where절: trim(E1.value) = 'Data on the Web'
또한, where 절에 다음과 같은 구문을 추가한다(S520-4-3).
where절: E1.numbering like E0.numbering || '%'
도 2a에서 텍스트 타입의 노드인 Data on the Web 노드(208)를 예로 들어 설명한다. Xpath 1식의 book[title='Data on the Web']은 book/title 엘리먼트가 'Data on the Web'이라는 조건을 나타내므로, title 엘리먼트는 book 엘리먼트의 자식이어야 한다. 그러므로, 듀이 순서(dewey Order) 값을 이용하여 book 엘리먼트와 title 엘리먼트가 부모-자식 간임을 나타내는 구문을 추가한다(S520-4-3). E1.numbering은 title 엘리먼트의 듀이 순서 값이고, E0.numbering은 book 엘리먼트의 듀이 순서 값이다.
contains() 함수 노드를 만난 경우(S520-5)에는 다음에 오는 텍스트 타입의 노드까지 탐색하여, WORD 테이블의 word 컬럼과 탐색한 텍스트 타입의 노드가 같아야 하는 조건을 포함하여 다음과 같은 SQL문을 추가한다. 예를 들어, 도 2a의 contains() 함수 노드(211)를 만난 경우에는, 그(211)의 자식노드인 text() 함수 노드(211)는 무시하고, text() 함수 노드(211)의 우측 형제 노드인 텍스트(text) 타입의 노드(213)를 탐색하여 다음과 같은 SQL 구문을 추가한다.
from절: Collection_WORD W1
where절: trim(W1.word) = 'Web(텍스트 타입의 노드)'
and W1.docid = E1.docid
and W1.eid = E1.eid
doc() 함수 노드를 만난 경우(S520-6)에는 doc() 함수 노드의 자식 노드를 탐색하여 다음과 같은 구문을 생성한다. 이 구문은 논리적인 하나의 컬렉션에 존재하는 여러 개의 XML 문서 중 books.xml의 docid를 검색하는 구문이다. 여기서, 테 이블의 별명(Alias)은 결과노드에서 구한 테이블의 별명(Alias)이다. 따라서, 결과노드가 탐색된 후, 테이블의 별명을 사용하여 다음 구문이 추가된다.
where절: E1.docid in (Select id from Collection_DOCUMENTS where docname = 'books.xml')
'or' 혹은 'and' 연산자 타입의 노드를 만난 경우(S520-7)에는 다음과 같이 변환한다.
먼저, 다음 식과 같이 'and' 연산자만 삽입된 XPath 식인 경우(S520-7-1)에는, 'and' 연산자를 무시하고 S520-1단계에서 S520-6단계를 그대로 적용한다.
doc('books.xml')//book[title='TCP/IP Illustrated' and author/last= 'Stevens']
'or' 연산자만 삽입된 XPath 식인 경우(S520-7-2)에는, S520-1단계에서 S520-6단계를 적용하여 SQL문을 생성하되 'or' 타입의 노드(405)를 기준으로 각 서브트리에 해당하는 SQL문을 '('로 묶은 뒤 or 연산으로 처리한다. 예를 들면, XPath 3식은 도 4a와 같은 AST가 생성된다.
[XPath 3]
doc('books.xml')//book[title='TCP/IP Illustrated' or author/last= 'Stevens']
먼저, S520-1단계에서 S520-6단계를 적용하여 서브트리 1과 서브트리 2 각각에 대한 SQL 1문과 SQL 2문을 도 4b에 작성된 바와 같이 생성한다. 그 후, SQL 1문과 SQL 2문의 from절은 결합하고, where절은 다음과 같이 도 4b의 (a)와 (b)를 "(" 로 묶은 뒤 or 연산으로 처리한다.
where절: (SQL 1의 (a)구문) or (SQL 2의 (b)구문)
따라서, XPath 3식의 전체 SQL문은 도 4c에 작성된 바와 같다.
'and' 연산자와 'or' 연산자가 결합된 XPath 식인 경우(S520-7-3)에는, AST를 순회하면서 각 서브트리별로 생성된 SQL문을 모두 "("로 묶어 차례대로 and, or연산으로 처리한다. 이 경우는, 'or' 연산자만 삽입된 XPath 식(S520-7-2)에서, 도 4c와 같이 텍스트(text)를 검색하는 구문만 "("으로 묶어 or 연산으로 처리한 점과 다르다.
where절: (SQL 1)
and
(SQL 2)
or
(SQL 3)
[XPath 4]
doc('books.xml')//book[price='39.95' and author/last = 'Buneman' or author/first ='W.']
예를 들어, XPath 4식에 대한 AST를 순회하면서 각 서브트리에 관한 SQL문을 생성한 결과는 도 4d와 같다.
S530단계에서는, select 절을 생성하여 S520단계에서 생성한 from절, where절과 결합한다. S520-2-3 단계에서 저장한 결과노드에서의 별명(Alias) 값으로 XML 문서의 식별자인 docid와 결과노드의 듀이 순서(dewey Order) 값인 numbering을 출력하는 select절을 생성한다.
select 절 : select E2.docid, E2.numbering
또한, 지금까지 생성한 ELEMENT 테이블들의 docid 컬럼을 조인하는 구문을 추가한다. 각 ELEMENT 테이블들을 docid 컬럼으로 연결하기 위함이다.
where절 : and E2.docid = E1.docid
and E1.docid = E0.docid
이하, 위에서 설명한 방법을 기초로 XPath 식을 SQL문으로 변환하는 예를 설명한다. 도 2 및 도 5를 참조하여 위에서 제시한 XPath 1식을 SQL문으로 변환하는 과정을 설명한다.
먼저 S500 단계를 통해 XPath 1식을 AST 1으로 변환한다. 변환된 AST 1을 도시하면 도 2a에 도시된 트리가 된다.
그 다음, S510 단계를 수행한다. AST 1에서 결과노드를 찾는 과정은 위에서 설명한 바와 같다. AST 1에서의 결과노드는 subjects 노드(209)이다.
S520단계를 통해 AST 1을 깊이 우선 탐색하면서 각 노드의 타입별로 적절한 SQL문을 생성한다. AST 1을 깊이 우선 탐색하면 도 2a에서의 참조 번호(Reference number)순으로 각 노드를 탐색하게 되므로, 그 순서를 따라 변환방법을 설명한다.
가장 먼저 탐색되는 '//'노드(200)를 스택(stack)에 푸쉬(push)한다(S520-1). 그 다음 '//'노드(201) 역시, 스택(stack)에 푸쉬(push)한다(S520-1).
doc()함수 노드(202)는 그(202)의 자식노드인 books.xml 노드(203)를 탐색하 여 다음과 같은 구문을 생성한다(S520-6).
where절: (Select id from publications_XML_DOCUMENTS where docname = 'books.xml')
book 노드(204)는 QName 타입의 노드에 해당한다(S520-2). -1로 초기화된 rename변수 값을 1 증가시키므로, rename변수 값은 0이 된다. 따라서, from절에 삽입될 테이블의 별명(Alias)은 0이 된다(S520-2-1). 그 다음, 스택(stack)을 팝(pop)하여 얻은 값이 '//'이므로, '~%/'와 당해 노드 book을 결합하여 경로(path) '~%/book'을 생성한다(S520-2-2). 당해 노드 book과 S510 단계에서 검색한 결과노드 subjects가 일치하지 않으므로, S520-2-3을 수행하지 않는다.
Predicate 타입의 노드(205)는, 이전까지 생성한 경로(path) '~%/book'으로 다음과 같은 SQL문을 생성한다(S520-3-1). 이 때, 테이블의 별명(Alias)은 전 단계인 book 노드(204)에서 구한 0이 된다.
from절: publications_ELEMENT E0, publications_LOCATION L0
where절: L0.path like '~%/book'
and E0.docid = L0.docid
and E0.pathid = L0.pathid
'=' 노드(206)는 문자열(String) 타입의 변수에 저장해 둔다.
title 노드(207)는 QName 타입의 노드에 해당한다(S520-2). rename변수 값을 1 증가시키므로, rename변수 값은 1이 된다. 따라서, from 절에 삽입될 테이블의 별명(Alias)은 1이 된다(S520-2-1). title 노드(207)는 Predicate 타입의 노드 (205)다음에 온 Qname 타입의 노드이므로, 스택(stack)을 팝(pop)하지 않는다. Predicate 타입의 노드(205) 전의 book 노드(204)에서 생성한 경로(Path)에 '~/'와 당해 노드 'title'을 결합하여 경로(path) '~%/book~/title'을 생성한다(S520-2-2). 당해 노드 title과 S510 단계에서 검색한 결과노드 subjects가 일치하지 않으므로, S520-2-3을 수행하지 않는다.
Data on the Web 노드(208)는 텍스트(text) 타입의 노드이다(S520-4). 그러므로, 이전까지 생성한 경로(path)로 다음과 같은 SQL문을 생성한다(S520-4-1). 이 때, 테이블의 별명(Alias)은 전 단계인 title 노드(207)에서 구한 1이 된다.
from절: publications_ELEMENT E1, publications_LOCATION L1
where절: L1.path like '~%/book~/title'
and E1.docid = L1.docid
and E1.pathid = L1.pathid
또한, Xpath 1식의 [title='Data on the Web']이라는 조건에 해당하는 다음 구문을 추가한다(S520-4-2).
where절: trim(E1.value) = 'Data on the Web'
Xpath 1식의 book[title='Data on the Web']은 위에서 설명한 바와 같이, 듀이 순서(dewey Order) 값을 이용하여 book 엘리먼트와 title 엘리먼트가 부모-자식 간임을 나타내는 다음 구문을 추가한다(S520-4-3). E1.numbering은 title 엘리먼트의 듀이 순서 값이고, E0.numbering은 book 엘리먼트의 듀이 순서 값이다.
where절: E1.numbering like E0.numbering || '%'
subjects 노드(209)는 QName 타입의 노드에 해당한다(S520-2). rename변수 값을 1 증가시키므로, rename변수 값은 2가 된다. 따라서, from절에 삽입될 테이블의 별명(Alias)은 2가 된다(S520-2-1). 그 다음, 스택(stack)을 팝(pop)하여 얻은 값이 '//'이므로, 이전 경로인 book 노드(204)에서 생성한 경로(Path)에 '~%/'와 당해 노드 'subjects'을 결합하여 경로(path) '~%/book~%/subjects'을 생성한다(S520-2-2). 당해 노드 subjects와 S510 단계에서 검색한 결과노드 subjects가 일치하고 스택(stack)이 비어 있으므로, 다음과 같은 SQL문을 생성한다(S520-2-3). 또한, subjects 엘리먼트는 book 엘리먼트의 자손이어야 한다. 그러므로, 듀이 순서(dewey Order) 값을 이용한 구문을 추가한다. E2.numbering은 subjects 엘리먼트의 듀이 순서 값이고, E0.numbering은 book 엘리먼트의 듀이 순서 값이다.
from절 : publications_ELEMENT E2, publications_LOCATION L2
where절: L2.path like '~%/book~%/subjects'
and E2.docid = L2.docid
and E2.pathid = L2.pathid
and E2.docid in (Select id from publications_XML_DOCUMENTS
where docname = 'books.xml')
and E2.numbering like E0.numbering || '%'
결과노드인 subjects노드(209)에서 테이블의 별명(Alias)을 저장하여 S530단계에서 select절을 생성하는데 이용한다. 그리고, doc 함수 노드(202)에서 생성한 구문을 당해 테이블의 별명(Alias)을 이용하여 추가한다.
Predicate 타입의 노드(210)는 subjects노드(209)에서 테이블의 별명(Alias) 2로 from 절과 where절을 생성하였으므로, 중복하여 SQL문을 생성하지 않는다.
contains() 함수 노드(211)는 그의 자식노드인 text()노드(212)는 무시하고, text() 노드(212)의 우측형제인 텍스트(text) 타입의 노드(213)를 탐색하여 다음과 같은 SQL 구문을 추가한다(S520-5). 이 때 테이블의 별명(Alias)은 2가 된다.
from절: publications_WORD W2
where절: trim(W2.word) = 'Web'
and W2.docid = E2.docid
and W2.eid = E2.eid
마지막으로 S530단계에서 결과노드에서 저장한 테이블의 별명(Alias) 값으로 XML 문서의 식별자인 'docid'와 결과노드의 듀이 순서(dewey Order) 값인 'numbering' 을 출력하는 select절을 생성한다.
select 절 : select E2.docid, E2.numbering
또한, ELEMENT 테이블들의 docid 컬럼을 조인하는 구문을 추가한다.
where절 : and E2.docid = E1.docid
and E1.docid = E0.docid
S520단계와 S530단계에서 생성한 select 절과 from 절, where절을 결합하면 완전한 SQL문이 도 2b와 같이 생성된다.
XPath 1식을 참조하면, 듀이 순서(Dewey Order)값을 사용함으로써, title이 'Data on the Web'인 book의 자손노드 subjects를 한번의 질의로 찾고 있다. 듀이 순서(Dewey Order) 기법을 적용하지 않고, XML 문서상에서 각 노드에 일정한 순서대로 고유의 식별자(id)를 부여하는 글로벌 순서(General Order)방식을 적용하면, title이 'Data on the Web'인 book의 id를 찾고, 이를 부모로 가지는 노드의 id를 찾고 다시 이를 부모로 가지는 노드의 id를 찾는 등, subjects노드를 찾을 때까지 서브쿼리(Subquery)를 생성하여 반복적으로 질의를 처리해야 한다. 즉 XML 문서 상에서 book노드의 깊이(Depth)와 subjects노드의 깊이의 차이가 클수록 서브쿼리를 생성하여 질의를 수행하는 횟수가 많아지므로 시스템의 성능이 저하된다.
이상 설명한 바와 같이 본 발명에 따르면, XML 문서를 관계형 데이터베이스에 저장하고, 저장된 XML 문서에 대한 질의어를 SQL문으로 변환하여 처리할 수 있는 수 있게 된다.
이상에서는 본 발명의 바람직한 실시예에 대하여 도시하고 설명하였지만, 본 발명은 상술한 특정의 실시예에 한정되지 아니하며, 청구범위에서 청구하는 본 발명의 요지를 벗어남이 없이 당해 발명이 속하는 기술분야에서 통상의 지식을 가진 자에 의해 다양한 변형실시가 가능한 것은 물론이고, 이러한 변형실시들은 본 발명의 기술적 사상이나 전망으로부터 개별적으로 이해되어져서는 안 될 것이다.

Claims (12)

  1. 추상구문트리에서 결과노드(Output Node)를 검색하는 단계;
    상기 추상구문트리를 깊이 우선 탐색하면서 각 노드의 타입에 대응하여 관계형 데이터베이스에 있는 테이블을 이용하여 from절과 where절을 생성하는 단계;
    상기 결과노드를 검색하는 select 절을 생성하여 상기 select절과 상기 from 절 및 상기 where절을 결합하여, XML문서 검색을 위한 질의어를 SQL로 변환하는 단계; 및
    상기 관계형 데이터베이스에 대하여 상기 SQL로 질의를 수행하여 결과를 출력하는 단계;를 포함하는 관계형 데이터베이스에서 XML 문서 검색을 위한 질의 처리 방법.
  2. 제 1항에 있어서,
    상기 관계형 데이터베이스는 XML 문서의 이름에 관한 정보를 포함하는 테이블, XML 문서 내의 경로에 관한 정보를 포함하는 테이블, XML 문서 내의 키워드들에 관한 정보를 포함하는 테이블, XML 문서 내의 엘리먼트에 관한 정보를 포함하는 테이블, 및 XML 문서 내의 애트리뷰트에 관한 정보를 포함하는 테이블 중 적어도 어느 하나 이상을 포함하는 것을 특징으로 하는 관계형 데이터베이스에서 XML 문서 검색을 위한 질의 처리 방법.
  3. 제 2항에 있어서,
    상기 엘리먼트에 관한 정보를 포함하는 테이블은, 상기 엘리먼트의 듀이 순 서(Dewey Order) 값을 포함하는 것을 특징으로 하는 관계형 데이터베이스에서 XML 문서 검색을 위한 질의 처리 방법.
  4. 제 1항에 있어서,
    상기 질의어는, XPath식인 것을 특징으로 하는 관계형 데이터베이스에서 XML 문서 검색을 위한 질의 처리 방법.
  5. 삭제
  6. 제 1항에 있어서,
    상기 결과노드를 검색하는 단계는, 상기 추상구문트리를 부모노드, 우측형제노드, 자식노드 순으로 순회하면서 처음 만나게 되는, XML 문서의 태그 이름인 QName 타입을 검색하는 것을 특징으로 하는 관계형 데이터베이스를 이용하여 XML 문서 검색을 위한 질의 처리 방법.
  7. 제 1항에 있어서,
    상기 from절과 where절을 생성하는 단계는,
    상기 노드의 타입이 상기 XML문서 내의 엘리먼트의 순서를 나타내는 경우, 상기 엘리먼트의 듀이 순서 값을 기설정된 자릿수로 나타내어 수행하는 것을 특징으로 하는 관계형 데이터베이스를 이용하여 XML 문서 검색을 위한 질의 처리 방법.
  8. 추상구문트리에서 결과노드(Output Node)를 검색하고, 상기 추상구문트리를 깊이 우선 탐색하면서 각 노드의 타입에 대응하여 관계형 데이터베이스에 있는 테이블을 이용하여 from절과 where절을 생성한 후, 상기 결과노드를 검색하는 select 절을 생성하여 상기 select절과 상기 from 절 및 상기 where절을 결합하여, XML문서 검색을 위한 질의어를 SQL로 변환하는 SQL 변환기; 및
    상기 관계형 데이터베이스에 대하여 상기 SQL로 질의를 수행하는 SQL 처리기;를 포함하는 관계형 데이터베이스에서 XML 문서 검색을 위한 질의 처리 시스템.
  9. 제 8항에 있어서,
    상기 관계형 데이터베이스는 XML 문서의 이름에 관한 정보를 포함하는 테이 블, XML 문서 내의 경로에 관한 정보를 포함하는 테이블, XML 문서 내의 키워드들에 관한 정보를 포함하는 테이블, XML 문서 내의 엘리먼트에 관한 정보를 포함하는 테이블, 및 XML 문서 내의 애트리뷰트에 관한 정보를 포함하는 테이블 중 적어도 어느 하나 이상을 포함하는 것을 특징으로 하는 관계형 데이터베이스에서 XML 문서 검색을 위한 질의 처리 시스템.
  10. 제 9항에 있어서,
    상기 엘리먼트에 관한 정보를 포함하는 테이블은, 상기 엘리먼트의 듀이 순서(Dewey Order) 값을 포함하는 것을 특징으로 하는 관계형 데이터베이스에서 XML 문서 검색을 위한 질의 처리 시스템.
  11. 제 8항에 있어서,
    상기 질의어는, XPath식인 것을 특징으로 하는 관계형 데이터베이스에서 XML 문서 검색을 위한 질의 처리 시스템.
  12. 삭제
KR1020050104253A 2005-11-02 2005-11-02 관계형 데이터베이스에서 xml 문서 검색을 위한 질의처리 시스템 및 방법 KR100756978B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020050104253A KR100756978B1 (ko) 2005-11-02 2005-11-02 관계형 데이터베이스에서 xml 문서 검색을 위한 질의처리 시스템 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020050104253A KR100756978B1 (ko) 2005-11-02 2005-11-02 관계형 데이터베이스에서 xml 문서 검색을 위한 질의처리 시스템 및 방법

Publications (2)

Publication Number Publication Date
KR20070047470A KR20070047470A (ko) 2007-05-07
KR100756978B1 true KR100756978B1 (ko) 2007-09-07

Family

ID=38272330

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020050104253A KR100756978B1 (ko) 2005-11-02 2005-11-02 관계형 데이터베이스에서 xml 문서 검색을 위한 질의처리 시스템 및 방법

Country Status (1)

Country Link
KR (1) KR100756978B1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100912190B1 (ko) * 2007-10-31 2009-08-14 한양대학교 산학협력단 최적화 변환 규칙을 적용하여 rdql 질의를 sql질의로 변환하는 rdql-to-sql 시스템 및 방법
KR100932404B1 (ko) * 2008-02-25 2009-12-17 재단법인대구경북과학기술원 확장 정렬 칼럼과 확장 투플 식별자 기반의 정렬외부-유니온 방법을 사용하여 엑스쿼리 문을 에스큐엘문으로 변환하는 방법 및 장치
CN113986957A (zh) * 2021-11-02 2022-01-28 北京市律典通科技有限公司 一种基于XPath对数据库的查询方法
CN117971889A (zh) * 2024-03-29 2024-05-03 天津南大通用数据技术股份有限公司 一种基于分布式数据库的sql性能优化方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02408A (ja) * 1986-01-07 1990-01-05 Warner Lambert Co 可食無溶媒封入組成物
JPH02602A (ja) * 1987-10-30 1990-01-05 Devars Ms Co ソリッドステート電池
JPH02410A (ja) * 1987-10-09 1990-01-05 Gumma Pref Gov こんにゃくを利用した加工食品及びその製造方法
US20040205082A1 (en) 2003-04-14 2004-10-14 International Business Machines Corporation System and method for querying XML streams
KR20050000328A (ko) * 2003-06-23 2005-01-03 마이크로소프트 코포레이션 쿼리 최적화기 시스템 및 방법

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02408A (ja) * 1986-01-07 1990-01-05 Warner Lambert Co 可食無溶媒封入組成物
JPH02410A (ja) * 1987-10-09 1990-01-05 Gumma Pref Gov こんにゃくを利用した加工食品及びその製造方法
JPH02602A (ja) * 1987-10-30 1990-01-05 Devars Ms Co ソリッドステート電池
US20040205082A1 (en) 2003-04-14 2004-10-14 International Business Machines Corporation System and method for querying XML streams
KR20050000328A (ko) * 2003-06-23 2005-01-03 마이크로소프트 코포레이션 쿼리 최적화기 시스템 및 방법

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
정보처리학회 논문2004.08.
정보처리학회 논문2004.10.
정보처리학회 논문2006.02.

Also Published As

Publication number Publication date
KR20070047470A (ko) 2007-05-07

Similar Documents

Publication Publication Date Title
Yoshikawa et al. XRel: a path-based approach to storage and retrieval of XML documents using relational databases
US8209352B2 (en) Method and mechanism for efficient storage and query of XML documents based on paths
US6947945B1 (en) Using an XML query language to publish relational data as XML
Cooper et al. A fast index for semistructured data
Rys XML and relational database management systems: inside Microsoft® SQL Server™ 2005
US7756857B2 (en) Indexing and querying of structured documents
US6738767B1 (en) System and method for discovering schematic structure in hypertext documents
US7493305B2 (en) Efficient queribility and manageability of an XML index with path subsetting
US7171404B2 (en) Parent-child query indexing for XML databases
US20080010256A1 (en) Element query method and system
WO2004053734A1 (en) Evaluating relevance of results in a semi-structured data-base system
JP2001034619A (ja) Xmlデータの格納/検索方法およびxmlデータ検索システム
KR100756978B1 (ko) 관계형 데이터베이스에서 xml 문서 검색을 위한 질의처리 시스템 및 방법
Amagasa et al. Realizing temporal XML repositories using temporal relational databases
US7895190B2 (en) Indexing and querying XML documents stored in a relational database
Pluempitiwiriyawej et al. A classification scheme for semantic and schematic heterogeneities in XML data sources
Xiao et al. Automatic mapping from XML documents to ontologies
Hatano et al. Extraction of partial XML documents using IR-based structure and contents analysis
Kinutani et al. Identifying result subdocuments of XML search conditions
Lim et al. Integrating HTML tables using semantic hierarchies and meta-data sets
Zwol et al. Using webspaces to model document collections on the web
Böttcher et al. Generalizing and improving SQL/XML query evaluation
KR20060032463A (ko) 상이한 구조의 대용량 XML 데이터 검색을 위한 XMLDB 구축방법과 XQuery 엔진 시스템 및 그 방법
Hu et al. Querying and indexing XML documents
Kenab et al. Parameterized formatting of an XML document by XSL rules

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