KR20050000348A - 중간 언어 표현 방법 및 시스템 - Google Patents

중간 언어 표현 방법 및 시스템 Download PDF

Info

Publication number
KR20050000348A
KR20050000348A KR1020040047194A KR20040047194A KR20050000348A KR 20050000348 A KR20050000348 A KR 20050000348A KR 1020040047194 A KR1020040047194 A KR 1020040047194A KR 20040047194 A KR20040047194 A KR 20040047194A KR 20050000348 A KR20050000348 A KR 20050000348A
Authority
KR
South Korea
Prior art keywords
xml
operators
query
operator
node
Prior art date
Application number
KR1020040047194A
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 KR20050000348A publication Critical patent/KR20050000348A/ko

Links

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
    • G06F16/83Querying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • 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/99931Database or file accessing
    • 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/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • 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)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Devices For Executing Special Programs (AREA)
  • Machine Translation (AREA)

Abstract

컴퓨터 시스템 및 방법이 관계 및 비관계 데이터 소스에 대한 하나 이상의 XML 언어 조회의 의미론적 표현을 생성한다. 의미론적 중간 언어 표현은 하나 이상의 XML 언어 조회에 대한 의미를 명시적으로 설명한다. 의미론적 중간 언어는, 원래 조회(original query)의 연산을 설명하는 노드들을 가진 그래프 구조일 수 있다. 의미론적 그래프의 노드들에 할당된 연산자들로 인해, 원래 XML 조회의 명료한 정의가 가능하다. 의미론적 중간 언어는 하나 또는 다수의 데이터 소스에 대한 XML 조회를 수행하는데 사용될 수 있다. 방법은 하나 이상의 조회를 수신하는 단계, 수신된 조회내의 모든 연산에 대해 하나 이상의 노드 오브젝트를 정의하는 단계, 각각의 노드 오브젝트를 연산자를 사용해 번역하는 단계, 및 연산자들로부터, 의미론적 표현을 생성하는 단계를 포함한다.

Description

중간 언어 표현 방법 및 시스템{QUERY INTERMEDIATE LANGUAGE METHOD AND SYSTEM}
본 발명은 일반적으로 데이터 소스에 대해 조회하는 소프트웨어 분야에 관한 것으로서, 보다 구체적으로는, 하나 이상의 XML(eXtensible Markup Language) 또는 가상 XML 데이터 소스에 대해 조회하기 위해 중간 언어를 사용하는 것에 관한 것이다.
XML은, 데이터를 마크업하기 위해 일반적인 구문에 인간이 판독할 수 있는 태그를 제공하는 문서 포매팅을 위한 W3C(World Wide Web Consortium)의 승인 표준이다. XML은 태그들의 고정 세트를 갖지 않으므로, 사용자들은 XML 표준에 따라 이러한 태그들을 정의할 수 있다. 데이터는 텍스트 마크업으로 둘러싸인 텍스트의 스트링으로서 XML 문서에 저장될 수 있다. W3C는 XML 정보 세트(XML Infoset)라 불리는 스펙(specification)에, 체계적으로 분류된 XML의 추상적 데이터 모델을 보유한다. Infoset는 속성을 포함하는 노드(property-containing nodes)의 관점에서 XML 문서의 논리적 구조를 기술한다. 잘-정의된 포맷(well-defined format)의 문서 내용은 XML이 용이하게 기술할 수 있지만, 그 구조가 표준 텍스트 문서의 구조와 일치하지 않거나 다른 어떤 XML 비호환 특성으로 인해, 용이하게 기술될 수 없는 다른 데이터 소스가 존재한다. 이러한 데이터 소스의 예로는 스프레드시트 또는 관계 데이터베이스를 들 수 있다.
가상 XML은 프로그래밍 모델에 액세스하는 다양한 데이터에 대해 일관성을 확립하며 실제적인 저장 포맷 대신에 사용자들이 생각하는 방식으로 데이터를 조작할 수 있게 하는 개념이다. 가상 XML 데이터를 조회하는 개념은 데이터를 실제로 XML로 변환하지 않으면서 데이터가 마치 XML인 것처럼 처리하는 것과 관련이 있다. 이 개념의 한가지 이점은, XML 인코딩의 오버헤드가 최소화된다는 것이다. 가상 XML 시나리오는, 조회 언어를 이용하여 비-XML 데이터 소스를 이 데이터 소스가 XML인 것처럼 조회할 수 있는 이점을 갖는 것이 바람직하다. 또한, 데이터와 가상 XML 표현간의 매핑은 충실도(fidelity)가 높은 것이 바람직하다.
가상 XML을 구현하는 것에 고유한 여러가지 어려움들이 존재한다. 한가지 문제점은 효율성이다. 단순히, XMLReaderTM와 같은 가상 XML 인터페이스를 이용해 데이터 소스를 노출한 다음, 그것을 XPathNavigatorTM와 같은 기존의 XML 조회 구현을 이용해 조회할 수 있다. 그러나, 모든 작업은 데이터 소스 자체에 의해 수행되는 대신에 XML 조회 엔진에서 발생한다.
일례로써, SQLServer에 구체화된 SQL(structured query language)에 대한 다음의 가상 XML 조회를 고려한다.
sql:database("Northwind"/Customer[@ID='ALKFI']/Order
이 조회에서, sql:database("Northwind")가 SQLServer의 Northwind 데이터베이스를가상 XML로서 노출시킨 다음, XPath/Customer[@ID='ALKFI']/Order는 Customer 요소들 중 하나로부터 Order 요소들 모두를 선택한다. 일 구현은 다음과 같은 것을 시도할 수 있다.
SQLServerMapping map = new SQLServerMapping("Northwind");
SQLServerXmlReader Data = new SQLServerXmlReader(map);
XPathNavigator nav = new XPathNavigator(data,"/Customer[@ID='ALKFI']/Order;
이러한 접근에는 적어도 2가지의 결함이 존재한다. 첫번째는, 조회에 의해 그 일부만이 사용되는 경우라 하더라도, XmlReader에 의해 전체 매핑이 수행된다는 것이다. 두번째 결함은, XPathNavigator보다 SQLServer가 Customer들을 ID에 의해 보다 효율적으로 방대하게 선택할 수 있다는 것이다. 상기 예에서는 XPathNavigator가 모든 작업을 수행한다. 이러한 어려움에 대한 보다 나은 해결책은 데이터 소스(여기에서는, SQLServer 데이터베이스)로의 가능한 많은 조회를 부하 이동하는 것일 수 있다. 그러나, 이것에는 주요한 조회 분석 및 재기입이 관련될 수 있다.
가상 XML 구현시의 또 하나의 문제점은, XML 데이터 모델이 하부 데이터 모델 및 그 타입 시스템과 항상 양호하게 정렬되는 것은 아니라는 점이다. 하부 데이터 소스의 모든 타입을 XML 타입으로 매핑할 수는 있지만, 이 프로세스는 충실도를 유지할 수 없으며 비효율적이기도 하다. 또한, 일 시스템의 타입들이 다른 시스템에 명백한 등가 타입을 갖지 않을 수도 있다. 예를 들어, 이미지와 같은 2진 데이터를 XML로 표현하는 것은 XML 문자 세트로의 값비싼 변환(예를 들어,베이스64-인코딩)을 요한다.
가상 XML에 대해 조회하는 이전의 시도들은, 조회를 위한 데이터 구조 및 매핑을 위한 데이터 구조의 2개의 상이한 데이터 구조를 구성한 다음, 이들을 일렬로 탐색하여, 가상 XML 뷰(view)를 가시화하지 않으면서, 직접적으로 원래의 데이터 소스에 대한 효율적인 조회를 생성하는 것에 의해, 이 문제에 접근했다. 이 접근이 처음에는 효과가 있었지만, 조회 및 매핑 언어의 복잡도가 증가함에 따라 개발이 상당히 어려워졌다. 조회 또는 매핑의 개념들은 흔히 타깃 데이터 모델로 직접적으로 번역되지 않으며, 복잡한 뷰를 가진 복잡한 조회를 구성하는 것은 풍부한 의미론적 분석과 재기입을 요한다.
따라서, XML 및 비-XML 데이터 소스에 대한 XML 조회와 뷰를 위한 가상 XML을 구현하는 통일화된 표현이 필요하다. 복잡한 매핑에 대한 조회를, 덜 복잡한 매핑에 대한 조회를 구성하고 수행하는 덜 복잡한 문제로 구현하는 방법 및 시스템이 바람직하다. 본 발명은 상술한 필요와 결점에 관한 것으로, 여기에서 설명하는 바와 같은 부가적인 이점들로 이를 해결한다.
본 발명은 QIL(query intermediate language)이라 명명된 XML 중간 언어 정의에 관한 것으로, 이는 XML 언어 조회 또는 뷰의 의미를 표현한다. QIL은 XML의 조회 또는 뷰에 대한 의미의 추상화로서, 조회를 실행하는데 사용되거나 조회를 타깃 언어로 실행시키는 언어 번역기 또는 컴파일러로의 입력으로 사용될 수 있다. QIL은 관계 및 비관계 데이터 소스 모두에 대한 조회에 사용될 수 있다.
본 발명의 태양에 따르면, XML 언어 조회를 수신하고, XML 언어 조회내의 모든 연산에 대해 하나 이상의 노드 오브젝트를 정의하며, QIL-특정 연산자를 사용해, 정의된 노드 오브젝트 각각을 번역한 다음, 노드 그래프의 연산자들로부터, 원래의 조회에 대한 조회 중간 언어 표현을 생성하는 것에 의해, QIL이 구성된다.
통상적으로, QIL 언어는, XML 조회 및 뷰가 생성되는 XML 언어용 전위 컴파일러(front-end compiler), QIL 생성기, 및 하나 이상의 데이터 소스에 대한 검색을 위해, XML 조회 또는 뷰에 대한 QIL의 의미론적 표현을 이용할 수 있는 후위 엔진(back-end engine)을 구비하는 컴퓨터 시스템의 일부로서 사용된다. 조회된 데이터 소스는 관계 데이터 또는 비관계 데이터일 수 있다.
전위 XML 언어의 예로는 XPath, XSLT, XQuery, DML, OPath, 및 Annotated Schema를 들 수 있다. 후위 엔진 타입의 예로는, 조회 언어가 SQL, MSIL 및 XQuery 등과 같은 복수개의 데이터 검색 언어들 중 하나일 수 있는 언어 변환기를 조회하는 QIL을 들 수 있다.
QIL 정의의 일례는, XML 조회 및 뷰 표현의 의미를 표현하기 위해 명료하고 명시적인 명령들을 제공하는 노드 정의 연산자로서 사용될 수 있는 XMLInfoset에 기초하여 잘 정의된 한 세트의 연산자를 포함한다. 이 연산자들은, 예를 들어, 튜플(tuples), 리터랄(literals), 부울 연산자, 시퀀스 연산자, 산술 연산자, 스트링 연산자, 값 비교 연산자, 노드 비교 연산자, 함수 정의 및 호출, XML 네비게이션, XML 구성, XML 속성 접근자, 타입 연산자, 언어 특정 연산자, 데이터 조작 처리, 특수 연산자, 및 데이터 소스 연산자를 포함하는 것이 바람직하다.
첨부된 도면을 참조하여 진행되는 예시적 실시예에 대한 다음의 상세한 설명으로부터 본 발명의 부가적인 특징 및 이점들이 명백해진다.
바람직한 실시예에 대한 다음의 상세한 설명 뿐만 아니라 상기 요약도 첨부된 도면을 참조할 때 더 잘 이해할 수 있다. 본 발명을 도시할 목적으로, 본 발명의 예시적인 구성을 도면에 나타내지만, 본 발명이, 개시되어 있는 특정 방법 및 수단으로 한정되는 것은 아니다.
도 1은 본 발명의 태양들이 구현될 수 있는 예시적 컴퓨팅 환경을 나타내는 도면.
도 2는 본 발명의 예시적 태양들을 구체화하는 예시적 기능 구조를 도시하는 블록도.
도 3은 본 발명의 실시예에 따른 중간 언어 생성의 몇가지 예시적 요소들을 도시하는 블록도.
도 4는 본 발명의 실시예에 따른 중간 언어 생성의 예시적 프로세스를 도시하는 흐름도.
<도면의 주요 부분에 대한 부호의 설명>
100 : 컴퓨팅 환경
120 : 처리 장치
130 : 시스템 메모리
210 : 전위 언어 컴파일러
220 : 중간 언어 생성기
230 : 중간 언어 정규화기
240 : 후위 조회 엔진
310 : 연산 식별자
320 : 노드 연산자 프로세서
개관
본 발명의 XML 중간 언어는 조회의 의미 또는 의미론을 명시적으로 표현한다. XML 중간 언어는 QIL이라 명명한다.
XML 중간 언어(QIL)는 (1) XML 조회와 XML 뷰 양자에 대해 균일한 표현을 제공함으로써, 조회/뷰 조합 문제를 상당히 단순화하며 (2) 모든 뷰를 "가상 XML"로서 처리하여 시스템 인터페이스를 상당히 단순화한다. 가능한 모든 언어 및 데이터 모델에 대해 하나의 API를 갖는 대신에, 모든 API는 공통적인 데이터 모델; XML 중간 언어(QIL)의 연산자들을 공유할 수 있다.
또한, QIL은 널리 공지되어 있는 컴파일러 문제를 해결한다. 통상적으로, 언어의 경우, 컴파일러는 N개의 후위 타깃 머신에 대해 M개의 전위 언어를 구현해야 한다. 각각이 쌍을 이루는 방식으로 조합이 구현된다면, 필요한 조합을 커버하기 위해 M×N개의 컴파일러 구현이 필요하다. 그러나, 공통적인 중간 표현을 도입하는 것에 의해 2개가 분리된다면, 컴파일러의 복잡도는 M+N으로 감소한다.
이러한 컴파일러 복잡도 감소를 수용하기 위해, 조회 중간 언어는 XML 조회/뷰 언어와 타깃 데이터 모델(.NET의 실제 XML 데이터, SQL 데이터 또는 파일 시스템에 대한 가상 XML 뷰)간의 추상화를 제공한다.
조회 중간 언어는 어떠한 XML 조회 언어보다 더 표현적일 수 있다. 이로 인해, 원래 언어만이 조회와 뷰에 사용된다면 불가능했을 새로운 종류의 분석과 최적화가 가능해진다.
예시적인 컴퓨팅 장치
도 1 및 다음의 논의는, 본 발명이 구현될 수 있는 적당한 컴퓨팅 환경에 대해 간략하고 일반적인 설명을 제공하려는 것이다. 그러나, 상술한 바와 같은 본 발명과 관련하여 핸드헬드, 휴대용 및 모든 종류의 다른 컴퓨팅 장치와 컴퓨팅 오브젝트가 사용될 수 있다는 것을 알 수 있다. 따라서, 이하에서는 범용 컴퓨터를 설명하지만, 이는 일례일 뿐이며, 본 발명은, 네트워크/버스 상호운영성 및 상호작용을 가진 클라이언트와 같은, 다른 컴퓨팅 장치로 구현될 수도 있다. 따라서, 본 발명은, 예를 들어, 클라이언트 장치가 어플라이언스내에 배치된 오브젝트와 같은 네트워크/버스 또는 다른 컴퓨팅 장치 및 오브젝트로의 인터페이스로서만 기능하는 네트워크 환경과 같이, 아주 적은 또는 최소의 클라이언트 리소스가 관련되는 네트워크형 호스트 서비스의 환경에 구현될 수도 있다. 본질적으로, 데이터가 저장되거나 데이터가 검색될 수 있는 곳이라면 어떤 곳이든 본 발명에 따른 연산을 위해 바람직하거나 적당한 환경이다.
요청되지는 않지만, 본 발명은 운영 체제를 통해, 장치 또는 오브젝트에 대한 서비스 개발자에 의한 사용을 위해 구현될 수 있으며, 그리고/또는 본 발명에 따라 동작하는 애플리케이션 소프트웨어내에 포함될 수 있다. 소프트웨어는, 클라이언트 워크스테이션, 서버 또는 다른 장치와 같은 하나 이상의 컴퓨터에 의해 실행되는, 프로그램 모듈과 같은 컴퓨터-실행가능 명령의 일반적인 문맥에서 설명될 수 있다. 일반적으로, 프로그램 모듈은, 특정한 태스크를 수행하거나 특정한 추상적 데이터형을 구현하는 루틴, 프로그램, 오브젝트, 컴포넌트, 데이터 구조 등을 포함한다. 통상적으로, 프로그램 모듈들의 기능은 다양한 실시예에서의 필요에 따라 조합되거나 분산될 수 있다. 또한, 당업자는, 본 발명이 다른 컴퓨터 구성으로도 실행될 수 있다는 것을 알 수 있다. 본 발명에 사용하기에 적당할 수 있는, 널리 공지되어 있는 다른 컴퓨팅 시스템, 환경, 및/또는 구성으로는 퍼스널 컴퓨터(PC), ATM(automatic teller machines), 서버 컴퓨터, 핸드-헬드 또는 랩탑 장치, 멀티-프로세서 시스템, 마이크로프로세서-기반 시스템, 프로그램가능한 상용 전자제품, 네트워크 PC, 어플라이언스, 라이트(lights), 환경 제어 요소(environmental control elements), 미니컴퓨터, 메인프레임 컴퓨터 등을 들 수 있지만, 이에 한정되는 것은 아니다. 본 발명은 또한, 태스크가 통신 네트워크/버스 또는 다른 데이터 전송 매체를 통해 링크되어 있는 원격 프로세싱 장치에 의해 수행되는 분산형 컴퓨팅 환경에서 실행될 수도 있다. 분산형 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 장치를 포함하는 로컬 및 원격 컴퓨터 저장 매체 모두에 위치할 수 있으며, 클라이언트 노드는 차례로 서버 노드로서 동작할 수 있다.
따라서, 도 1은, 본 발명이 구현될 수 있는 적당한 컴퓨팅 시스템 환경(100)의 일례를 도시하지만, 상술한 바와 같이, 컴퓨팅 시스템 환경(100)은 적당한 컴퓨팅 환경의 일례일 뿐이며 본 발명의 사용 범위 또는 기능 범위에 어떤 제한을 가하려는 것은 아니다. 컴퓨팅 환경(100)은 예시적 동작 환경(100)에 도시된 컴포넌트들 중 어느 하나 또는 그 조합과 관련하여 어떤 의존성이나 요구사항을 갖는 것으로 해석되어서는 안된다.
도 1에서, 본 발명을 구현하는 예시적인 시스템은 컴퓨터 시스템(110)의 형태인 범용 컴퓨팅 장치를 포함한다. 컴퓨터 시스템(110)의 구성 요소로는 처리 장치(120), 시스템 메모리(130), 및 시스템 메모리(130)를 포함한 각종 시스템 컴포넌트를 처리 장치(120)에 연결시키는 시스템 버스(121)를 포함하지만 이에 제한되는 것은 아니다. 시스템 버스(121)는 메모리 버스 또는 메모리 콘트롤러, 주변장치 버스 및 각종 버스 아키텍처 중 임의의 것을 사용하는 로컬 버스를 포함한 몇가지 유형의 버스 구조 중 어느 것이라도 될 수 있다. 예로서, 이러한 구조는 ISA(industry standard architecture) 버스, MCA(micro channel architecture) 버스, EISA(Enhanced ISA) 버스, VESA(video electronics standard association) 로컬 버스, 그리고 메자닌 버스(mezzanine bus)로도 알려진 PCI(peripheral component interconnect) 버스 등을 포함하지만 이에 제한되는 것은 아니다.
컴퓨터 시스템(110)은 여러 컴퓨터 판독가능 매체를 포함한다. 컴퓨터 시스템(110)에 의해 액세스 가능한 매체는 그 어떤 것이든지 컴퓨터 판독가능 매체가 될 수 있고, 이러한 컴퓨터 판독가능 매체는 휘발성 및 불휘발성 매체, 이동식 및이동불가식 매체를 포함한다. 예로서, 컴퓨터 판독가능 매체는 컴퓨터 기억장치 매체 및 통신 매체를 포함하며 이제 제한되는 것은 아니다. 컴퓨터 기억장치 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보 저장을 위해 모든 방법과 기술로 구현된 휘발성 및 불휘발성, 이동식 및 이동불가식 매체를 포함한다. 컴퓨터 기억장치 매체는 RAM, ROM, EEPROM, 플래쉬 메모리 또는 기타 메모리 기술, CD-ROM, CDRW DVD(compact disc-rewitable digital versatile disk) 또는 기타 광 디스크 기억장치, 자기 카세트, 자기 테이프, 자기 디스크 기억장치 또는 기타 자기 기억장치, 또는 컴퓨터 시스템(110)에 의해 액세스되고 원하는 정보를 저장할 수 있는 기타 모든 매체를 포함하지만 이에 제한되는 것은 아니다. 통신 매체는 일반적으로 반송파(carrier wave) 또는 기타 전송 메커니즘(transport mechanism)과 같은 피변조 데이터 신호(modulated data signal)에서 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터 등을 구현하고 모든 전달 매체 정보를 포함한다. "피변조 데이터 신호"라는 용어는, 하나 이상의 특성 셋(characteristics set)을 가지고 있는 신호 또는 신호에서 정보가 암호화되는 것과 같은 방식으로 신호가 변경된 것을 의미한다. 예로서, 통신 매체는 유선 네트워크 또는 다이렉트 유선 연결과 같은 유선 매체, 그리고 음향, RF, 적외선, 기타 무선 매체와 같은 무선 매체를 포함하지만 이에 제한되는 것은 아니다. 위에서 언급된 매체들의 모든 조합이 또한 컴퓨터 판독가능 매체의 영역 안에 포함되어야 한다.
시스템 메모리(130)는 판독 전용 메모리(ROM)(131) 및 랜덤 액세스메모리(RAM)(132)와 같은 휘발성 및/또는 비휘발성 메모리의 모양으로 컴퓨터 기억장치 매체를 포함한다. 시동 시 컴퓨터 시스템(110) 내의 구성요소들 사이의 정보의 전송을 돕는 기본 루틴을 포함하는 기본 입/출력 시스템(BIOS)(133)은 일반적으로 ROM(131)에 저장되어 있다. RAM(132)은 일반적으로 즉시 액세스 가능하고/가능하거나 현재 처리 장치(120)에 의해 동작되고 있는 데이터 및/또는 프로그램 모듈을 포함한다. 예로서, 도 1은 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136) 그리고 프로그램 데이터(137)를 도시하고 있지만 이에 제한되는 것은 아니다.
컴퓨터 시스템(110)은 또한 기타 이동식/이동불가식, 휘발성/불휘발성 컴퓨터 기억장치 매체를 포함한다. 단지 예로서, 도 1은 이동불가식, 불휘발성 자기 매체로의 기록 또는 그로부터의 판독을 위한 하드 디스크 드라이브(141), 이동식, 불휘발성 자기 디스크(152)로의 기록 또는 그로부터의 판독을 위한 자기 디스크 드라이브(151), CD-ROM, CDRW 또는 기타 광 매체 등의 이동식, 비휘발성 광 디스크(156)로의 기록 또는 그로부터의 판독을 위한 광 디스크 드라이브(155)를 포함한다. 예시적인 운영 환경에서 사용될 수 있는 기타 이동식/이동불가식, 휘발성/불휘발성 컴퓨터 기억장치 매체로는 자기 테이프 카세트, 플래쉬 메모리 카드, DVD, 디지털 비디오 테이프, 고체(solid state) RAM, 고체 ROM 등이 있지만 이에 제한되는 것은 아니다. 하드 디스크 드라이브(141)는 일반적으로 인터페이스(140)와 같은 이동불가능형 메모리 인터페이스를 통해 시스템 버스(121)에 접속되고, 자기 디스크 드라이브(151) 및 광 디스크 드라이브(155)는 일반적으로 인터페이스(150)와 같은 이동식 메모리 인터페이스에 의해 시스템 버스(121)에 접속된다.
위에서 설명되고 도 1에 도시된 드라이브들 및 이들과 관련된 컴퓨터 기억장치 매체는, 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 및 컴퓨터 시스템(110)의 다른 데이터에 대한 기억장치를 제공한다. 도 1에서, 예를 들어, 하드 디스크 드라이브(141)는 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146), 및 프로그램 데이터(147)를 저장한다. 여기서 주의할 점은 이 컴포넌트들이 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136), 및 프로그램 데이터(137)와 동일할 수도 있고 다를 수도 있다는 것이다. 이에 관해, 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146), 및 프로그램 데이터(147)에 다른 번호가 주어졌다는 것은 적어도 이들이 서로 다른 본(copy)라는 것을 도시한다. 사용자는 키보드(162), 일반적으로 마우스라고 알려진 포인팅 디바이스(161), 트랙볼(trackball) 또는 터치 패드 등의 입력 장치를 통해 명령 및 정보를 컴퓨터 시스템(110)에 입력할 수 있다. 다른 입력 장치(도시 생략)로는 마이크, 조이스틱, 게임 패드, 위성 안테나, 스캐너 등이 있을 수 있다. 이들 및 다른 입력 장치는 종종 시스템 버스(121)에 연결된 사용자 입력 인터페이스(160)를 통해 처리 장치(120)에 접속되지만, 병렬 포트, 게임 포트, USB(universal serial bus) 등의 다른 인터페이스 및 버스 구조에 의해 연결될 수도 있다. 모니터(191) 또는 다른 유형의 디스플레이 장치도 비디오 인터페이스(190) 등의 인터페이스를 통해 시스템 버스(121)에 연결될 수 있고, 비디오 인터페이스(190)는 또한 비디오 메모리(도시 생략)와 통신한다. 모니터(191) 이외에, 컴퓨터 시스템은 또한 스피커(197) 및 프린터(196) 등의 다른 주변 출력 장치를 포함할 수 있고, 이들은 출력 주변장치 인터페이스(195)를 통해 연결될 수 있다.
컴퓨터 시스템(110)은 하나 이상의 원격 컴퓨터(180)로의 논리적 연결을 사용하여 네트워크화 또는 분산된 환경에서 동작할 수 있다. 원격 컴퓨터(180)는 또 하나의 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 다른 공통 네트워크 노드일 수 있고, 일반적으로 컴퓨터 시스템(110)과 관련하여 위에서 설명한 엘리먼트의 대부분 또는 그 전부를 포함하지만, 도 1에는 메모리 저장 장치(181)만이 도시되어 있다. 도 1에 도시된 논리적 연결로는 LAN(171) 및 WAN(173)이 있고, 또한 다른 네트워크/버스를 포함할 수 있다. 이러한 네트워킹 환경은 가정, 사무실, 회사 전체에 걸친 컴퓨터 네트워크, 인트라넷 및 인터넷에서 통상적인 것이다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터 시스템(110)은 네트워크 인터페이스 또는 어댑터(170)를 통해 LAN(171)에 연결된다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터 시스템(110)은 일반적으로 인터넷과 같은 WAN(173)상에서의 통신을 설정하기 위한 모뎀(172) 또는 다른 수단을 포함한다. 내장형 또는 외장형일 수 있는 모뎀(172)은 사용자 입력 인터페이스(160) 또는 다른 적절한 메커니즘을 통해 시스템 버스(121)에 연결된다. 네트워크화된 환경에서, 컴퓨터 시스템(110) 또는 그의 일부와 관련하여 기술된 프로그램 모듈은 원격 메모리 저장 장치에 저장될 수 있다. 그 예로서, 도 1은 메모리 장치(181)에 위치하고 있는 원격 애플리케이션프로그램(185)을 도시하고 있지만 이에 제한되는 것은 아니다. 도시된 네트워크 연결은 예시적인 것이며 이 컴퓨터들 사이의 통신 링크를 설정하는 다른 수단이 사용될 수 있다는 것을 이해할 것이다.
퍼스널 컴퓨팅 및 인터넷을 중심으로 다양한 분산형 컴퓨팅 프레임워크가 개발되어 왔으며 개발 중에 있다. 개인 및 비즈니스 사용자를 막론하고, 애플리케이션 및 컴퓨팅 장치에 대해 심리스 상호운영이 가능한 웹-인에이블형 인터페이스가 제공되어, 컴퓨팅 활동을 차츰 웹 브라우저 또는 네트워크-지향화한다.
예를 들어, MICROSOFT®의 .NET 플랫폼은 서버, 웹-기반 데이터 저장과 같은 블록 구현 서비스 및 다운로드가능한 장치 소프트웨어를 포함한다. 여기에서는 예시적 실시예들을 컴퓨팅 장치상에 상주하는 소프트웨어와 관련하여 설명하지만, 본 발명에 대한 하나 이상의 부분들은, 본 발명에 따른 동작이 모든 .NET의 언어 및 서비스에 의해 수행되거나 지원되거나 이를 통해 액세스될 수 있도록, 운영 체제, 애플리케이션 프로그램 인터페이스(API), 또는 코프로세서, 디스플레이 장치 및 요구 오브젝트간의 "미들 맨" 오브젝트를 통해 구현될 수 있을 뿐 아니라, 다른 분산형 컴퓨팅 프레임워크에서도 구현될 수 있다.
예시적 실시예
도 2는 본 발명을 구체화하는 시스템 구조의 블록도를 도시한다. 본 구조는 다수의 데이터 소스에 대한 효과적인 XML 조회를 위해 데이터를 수용하고, 컴파일하며, 번역하고, 정규화하며 액세스하는데 필요한 기본적인 블록을 도시한다. XML 또는 XML 관련 표준에 따른, 복수개의 전위 언어 컴파일러(210)가 실현될 수 있다.이들 전위 컴파일러(210)는 컴파일된 XML 코드(215)를 생성하기 위해 XML 조회, XML 뷰, 또는 관련된 다른 XML 언어 조회를 생성한다.
중간 언어 생성기(220)는 컴파일된 입력 XML 코드의 중간 언어 표현(225)을 생성한다. 중간 언어 표현(225)은 다수의 데이터 소스에 대한 유틸리티를 제공하기 위해 본 구조(200)의 함수(230)에 의해 정규화될 수 있다. 정규화기(230)는 효율적인 중간 언어 표현(235)을 생성하기 위해 중간 언어를 최적화하는데도 사용될 수 있다. 도 2의 구조(200)를 위해 중간 언어 정규화기가 반드시 필요한 것은 아니라는 것을 알 수 있다.
중간 코드 표현을 통해 액세스될 수 있는 복수개 데이터 소스(260)를 지원하기 위해 복수개의 후위 조회 엔진(240)이 존재할 수 있다. 각각의 후위 엔진은, 지원되는 각각의 데이터 소스내의 데이터 모델에 따른 데이터 소스에 대해 효율적으로 동작하도록 구성될 수 있다. 후위 엔진(240)은 중간 언어의 XML 표현에 대응되는 타깃 데이터 소스 조회를 생성한다. 후위 조회 엔진(240)은 적절한 기계 코드(245)를 소정 조회를 실행할 수 있는 조회 실행 엔진(250)에 전달한다. 조회 실행 엔진(250)은 통상적으로, 엔진이 조회 결과(270)를 출력(255)할 수 있도록 하기 위해, 하나 이상의 데이터 소스(260)에 액세스한다(265).
바람직한 조회 결과를 생성하기 위해, 하나 이상의 초기 조회가 상이한 타입의 하나 이상의 상이한 데이터 소스에 대해 사용될 수 있다.
도 3은 본 발명에 따른 예시적 중간 언어 생성기(예를 들어, 도 2의 요소 220)의 기능 블록도이다. 도 3은, 중간 언어(IL) 생성기(220)에 입력되는 최대 M개의 복수개 XML 언어 컴파일러 소스(210a-d)가 존재할 수 있음을 도시한다. 이들 XML 언어 컴파일러들은 일반적으로 스캐닝, 파싱, 의미론적 분석, 및 어떤 타입의 XML 언어로의 변환에 관계된다. 이러한 언어들의 통상적인 예로는 XQuery DMLTM, OPathTM및 WPathTM과 같은 Microsoft® 조회 언어 뿐만 아니라 XPath의 W3C 표준, XSL(XML Stylesheet Language), XSLT, XML 조회 언어(XQuery)를 들 수 있다. 또한, XML 뷰 컴파일러가 존재할 수 있으며, XQueryTM의 W3C XML 표준 뷰 및, SQLXMLTM과 같은 Microsoft® Annotated Schemas를 포함할 수 있다. 본 발명의 중간 언어 표현 기술은 조회 및 뷰를 위한 다른 XML 언어에도 호환될 수 있다. 일반적으로, 모든 XML 호환형 조회 및 뷰를 XML 언어 조회라 할 수 있다.
도 3에 도시된 중간 언어 생성기(220)는 2개의 주요 부분으로 분할되는데, 하나는 연산 식별자(310)이고 다른 하나는 노드 연산자 프로세서(320)이다. 이들이 함께 XML 중간 언어 생성기(220)의 의미론적 해석기 기능을 도시한다. 연산 식별자(310)는 컴파일러들(210a-d)로부터 원래의 XML 조회 또는 뷰내의 연산을 식별하는 태스크를 수행한다. 식별된 연산은 연산 식별자(310)에 의해 구성된 그래프 구조의 노드 포인트로 매핑된다. 노드 연산자 프로세서(320)는, 조회의 그래픽 표현을 완결하기 위해, XML IL-특정 연산자를 구성된 그래프 노드로 매핑한다. 그 다음, 노드 연산자 프로세서(320)는 이 연산자들을 원래의 조회 또는 뷰에 대한 XML 중간 언어 표현으로 디코드한다. 그 다음, 이 출력은 하나 이상의 후위 엔진(240a-d)으로 전달될 수 있다.
중간 언어 표현을 이용하여 다수의 데이터 소스에 대한 조회를 달성하기 위해, 최대 N개의 후위 엔진(240a-d)이 이 구조에 부가될 수 있다. 조회 및 뷰 언어들간의 중간 언어 추상화 및 다수의 타깃 모델로 인해, Micorsoft® .NETTM으로부터와 같은 실제 XML 데이터 및 가상 XML 데이터가 관계(예를 들어, SQL) 및 비관계(예를 들어, 평면 파일) 데이터 모두에 대해 사용될 수 있다.
도 4는 예시적 중간 언어 생성기의 의미론적 해석기 기능을 표현하는 본 발명의 실시예에 대한 흐름도를 나타낸다. 단계 410에서는, 중간 언어 생성기에 의해 XML 조회 또는 뷰가 수신된다. 수신된 조회는, 수신된 XML 조회 또는 뷰에서의 XML 연산 각각에 대응되는 그래프 노드 오브젝트를 식별하고 생성한 다음, 단계 420에서의 식별 기능으로 전달된다(415). 노드 오브젝트가 식별되면, 이들은 단계 430에서의 번역 기능으로 전달된다. 번역 기능은 식별된 오브젝트를 중간 언어 연산자에 할당한다. 통상적으로, 각각의 노드에 대해 하나의 중간 언어 연산자가 존재한다. 번역된 노드 오브젝트, 현재의 중간 언어 연산자는 이제 단계 440에서의 중간 언어 형성 엔진으로 전달된다(435). 이는 중간 언어 연산자를, 구성된 중간 언어(225)를 형성하는 명시적인 XML 부분에 매핑한다. 그 다음, 구성된 중간 언어는, 예를 들어, 도 2에 항목 230으로 나타낸 바와 같은 중간 언어 정규화기, 또는, 예를 들어, 도 3에 항목 240a-d로 나타낸 바와 같은 하나 이상의 후위 엔진으로 출력될 수 있다.
조회 중간 언어 속성 및 능력
XML 중간 언어는 XML 조회 또는 뷰의 표현이다. 이와 같이, 이는 XML 조회의 의미에 대한 명시적인 표현이기 때문에, QIL(query intermediate language)이라 명명될 수 있다. QIL은 XML 조회 및 뷰 언어 컴파일러에 대해 공통적인 의미론적 표현으로 볼 수 있다. QIL은 보통의 AST(abstract syntax tree)와 유사하지만, QIL은 구문이 아닌 조회의 의미론 또는 의미를 포착한다는 점에서 상이하다. QIL은 AST와 유사한 트리 구조가 아니라 그래프 구조라는 것이 또 하나의 차이점이다.
QIL은 (관계 및 비관계 데이터와 같은) 여러가지의 상이한 타깃 데이터 소스에 대한 (예를 들어, XPath, XSLT, XQuery, DML, 및 Annotated Schema와 같은) 다수의 상이한 XML 조회 언어 및 뷰 정의 언어의 추상화를 가능하게 한다. 그에 따라, QIL은 모든 호환형 XML 언어를 지원하는 공통적인 구조를 가능하게 한다. 모든 연산은 명시적이고 명료하며, 이로 인해, QIL이 장황해지기는 하지만, QIL을 사용하는 후위 엔진으로부터 QIL 생성을 지원하는 전위 컴파일러를 분리한다.
또한, QIL은 추상적 데이터 소스를 가상 XML로 모델링하는 방법을 제공한다. 데이터 소스는 XML 데이터 모델을 통해 직접적으로 노출되거나, QIL 사용자가 먼저 조회에 의해 생성된 중간 언어를 분석한 다음, 조회를 분산하기 위한 최선의 방법을 결정할 수도 있다. 예를 들어, 일부의 조회 결과는, 일부의 연산자가 그 데이터 소스에 적합한 조회 엔진으로 즉시 푸시되어 논리적 방식으로 분할될 수 있음을 지시할 수 있다. QIL로 인해 조회 태스크는, 가장 효과적으로 조회 태스크를 수행할 수 있는 엔진으로 푸시될 수 있다.
QIL은 원래의 조회를 표현하는 그래프 구조의 노드들을 가진 자신만의 연산자를 이용한다. 이들 연산자로 인해, 대응되는 데이터 소스로 이전에는 실현할 수 없었던 새로운 종류의 연산 최적화, 조회 재기입, 및 다른 분석이 가능해진다. 대부분의 QIL 연산자는 다수의 언어에 대해 공통적이며 일부는 특정한 XML 조회 언어에 대해 고유하다. 모든 XML 언어가 고유한 암시적 규칙과 특수한 경우를 갖지만, QIL은 이들 의미를 명시적으로 그리고 명료하게 인코드한다.
QIL은 노드 오브젝트의 그래프이다. 이 중간 언어는, XML 중간 언어 함수를 정의하는 0개 이상의 부가적 그래프와 함께, 주된 조회인 적어도 하나의 루트 그래프를 구비한다. 그래프를 메모리에 표현하는 상이하고 많은 방법이 존재하는데, 일 실시예는 노드 오브젝트의 네트워크를 사용하는 것이다. QIL은, 모든 노드 타입에 대해 하나의 클래스를 정의하는 대신에, 많은 타 노드 타입을 통해 공유되는 클래스를 이용한다.
원래의 조회 언어가 그렇지 않다 하더라도, QIL은 강하게 정형화된다(strongly-typed). QIL은 XML 데이터에 대한 XML 조회, 관계 데이터의 XML 뷰에 대한 XML 조회, 관계 데이터에 대한 XSLT 및, 텍스트 파일, 스프레드 시트, 및 비관계 데이터베이스와 같은, 비관계 데이터에 대한 XML 조회를 지원한다. QIL은 다수의 데이터 소스에 대한 이질적 분산 조회를 수행하는데 사용될 수도 있으며, XML 및 가상 XML 데이터 소스를 통합할 수도 있다.
QIL은 조회의 의미를 표현하며, 그에 따라, QIL은 물리적 조회 플랜이 아닌 논리적 조회 플랜이다. QIL에 대한 복수개 실행 전략이 존재한다. 이 언어는, LDF(left-depth-first) 방식으로 전체 QIL 그래프에 대해 반복하며, 직접적으로 실행될 수 있다. 다른 방법으로, QIL은 실행을 위해, SQL과 같은 다른 언어로 번역될 수 있다. 또 다른 방법은, QIL에 대한 통과를 분석하고, 하나의 엔진에 의한 소정의 실행 부분을 추출하며, 필요에 따라 그래프를 변형하고, 기존의 다른 엔진에 의한 실행을 위해 균형을 맞추는 것이다.
QIL은 강하게 정형화된다. QIL은 상세한 타입 시스템을 가지며, 이 타입 시스템은 예시적 QIL 연산자라고 하는 표에 반영되어 있는데, 여기에서는 그 일부를 설명한다. 다른 언급이 없으면, 본 설명은 값을 구하는 동적 타입이 아니라 표현의 정적 타입을 지시한다.
DocumentOrder 및 DML과 같은 수개의 선택된 "연산자들"을 제외하면, 모든 QilNode 표현은 어떤 갯수(cardinality)의 시퀀스이다. 달리 지시되지 않는 한, 이 갯수는 항상 None(unknown), Zero(empty), One(singleton), More(2+) 또는 이들의 조합들 중 하나이다.
이질적 시퀀스가 허용되기 때문에, 시퀀스는 원자 값 또는 노드(atomic values or nodes)이거나 그 모두일 수 있는 항목들로 이루어진다. 원자 값은 Int32, String, 및 DateTime과 같은 한 세트의 타입들로 더 분류된다. 대부분의 경우, QIL 원자 타입은 XQuery 원자 타입의 서브 세트이며, 실질적인 구현 선택을 반영한다. 표현이 원자가 아닐 경우(즉, 노드 또는 DML과 같은 선택된 연산자 타입일 경우), 그 표현은 원자 타입 None을 갖는다.
예시적인 QIL 연산자
바람직하게도, QIL의 각 연산자는 대응되는 고유한 NodeType 및 그것을 표현하는 클래스를 갖는다. 본질적으로, 연산자들은 QIL 그래프 구조의 노드에 존재한다. 따라서, 노드에 할당된 연산자들은 노드 타입을 가지며 연산자는 노드 타입의 함수가 된다. 클래스마다 다수의 노드 타입이 존재하지만, 노드 타입에 대해서는 하나의 클래스만이 존재한다. 각각의 연산자는 명시적이고 명료한 하나의 의미를 갖는 것이 바람직하다. 일반적으로, 이 의미는 그것이 사용되는 피연산자 또는 문맥의 타입에 독립적이다. 따라서, 각각의 연산자는 문맥-자유(context-free)인 것으로 간주될 수 있다. 각각의 연산자는 여기에서 설명하는 QIL 타입 시스템에 따라 강하게 정형화된다.
여기에서는 각각의 연산자 노드 타입에 대한 몇가지 예시적 속성들의 표가 제공된다. 다른 언급이 없다면, 피연산자는 널(null)일 수 없다. QIL 연산자는 특수 연산자(error, nop, unknown), 데이터 소스, 리터랄 (스칼라 상수), 부울 연산자, 시퀀스 연산자, 산술 연산자, 스트링 연산자, 값 비교 연산자, 노드 비교 연산자, (정렬(sorting)을 포함하는) 튜플 공간, 함수 정의 및 호출, XML 네비게이션, XML 구성, XML 속성 접근자(XML property accessors), 타입 연산자, XPath, XSLT, XQuery 및 DML(data manipulation language)에 대한 언어 특정 연산자의 예시적 그룹으로 분류될 수 있다.
튜플 공간 연산자
QIL의 예시적 연산자는 튜플이다. 튜플 연산자는 QIL에 빈번하게 사용될 수 있으며 중첩 방식(nested fashion)으로 사용될 수 있다. 이 연산자는 Tuple 노드 타입(클래스 QIL Tuple)으로 표현되며, 바람직하게도 항상, 튜플 공간을 구성하는반복자의 리스트(list of iterators), 튜플 공간을 필터링하는 장소 절(where clause), 튜플 공간의 출력을 생성하는 리턴 절(return clause)의 정확히 3개의 자식 노드를 갖는다.
중첩된 튜플을 가시화하는 한가지 방법은 로우와 칼럼의 표를 상상하는 것인데, 이 경우, 셀 자체가 표를 포함할 수 있다. 한 쌍의 육면 주사위가 일례를 제공한다. 다음의 표 1에 부분적으로 도시한 바와 같이, 36가지의 가능한 조합이 존재한다.
2개의 육면 주사위에 대한 튜플 공간
이 튜플 공간은 3개의 칼럼을 가진다. 처음의 두개는 각각 제 1 및 제 2 주사위에 대응된다. 세번째 칼럼은 결과를 보유하는데 사용되는데, 이 경우, 결과는 값들의 쌍이다. 이 튜플 공간은, 2개의 주사위를 굴리는 것으로부터 얻어지는 개별적인 조합의 수에 대응되는 36개의 로우를 가진다. 다음은, 예를 들어, XQuery로, 세트(1, 2, 3, 4, 5, 6)를 그 자신과 조인(join)하는 것으로부터 얻어지는 튜플 공간이다.
이 XQuery는 2개 세트의 외적(cross-product)을 계산하며, 그 외적의 각 멤버에 대해, 주사위 값들의 쌍인 시퀀스를 리턴한다. 그 결과는 리스트들의 순서 리스트이다.
((1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 1), (2, 2), ...)
그러나, XQuery는 리스트들의 리스트를 이들 모두의 연결(concatenation)로서 취급하므로, 실제로 이는 평면화된 리스트일 뿐이다.
(1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 2, 1, 2, 2, ...)
이 조회는 다음과 같이 기입될 수도 있다.
이 형태에서, 각각의 XQuery 변수는 정확히 튜플 공간의 칼럼 한개에 대응된다. 이는 또한 QIL에 대한 개념이다. QIL 튜플 노드 또는 연산자의 반복자 각각은 튜플 공간의 칼럼 한개에 대응된다. 리턴 절은, 위에서 LET를 사용하는 변수 할당으로 기재된 부가적인 칼럼에 기여한다.
튜플 노드의 실행 결과는 결과들의 순서 리스트이고, 결과 자체가 리스트일 경우, 이들은 상기한 바와 같이 함께 연결(평면화)된다. XQuery와 마찬가지로, QIL은 리스트들과 리스트들의 리스트들(lists and lists-of-lists)을 구별하지 않는다.
장소 절은, 그 로우의 일부를 제거하는 것에 의해, 튜플 공간을 필터링할 기회를 제공한다. 장소 절은 튜플 공간에 대해 다른 영향을 미치지 않는 것이 바람직하다. 상기한 예들 모두에서, 장소 절은 하나의 트루 노드로 이루어지는데, 이는 모든 로우가 수용됨(필터링이 발생하지 않음)을 의미한다. 그러나, 결과는, 다음과 같이, 그 합이 7이 되는 6개의 주사위 굴리기로 한정될 수 있는데, 이는 표 2에 도시한 필터링된 튜플 공간을 생성한다.
합이 7이 되는 주사위 굴리기의 튜플 공간
XQuery의 이 예는 다음의 QIL 표현으로 표현될 수 있다.
주의: 이는 단지 QIL 데이터 구조의 XML 표현일 뿐이다.
반복자 노드(For, Let)는 반복자 리스트에 도입된 다음, 조회에서 나중에 다시 참조된다. 이들을 기호적으로 참조하기 위해, 이들에게 고유한 id 속성을 부여한 다음, 나중에 이 이름들에 의해 참조될 수 있다. 이들 id 스트링은 그래프에 실제로 존재하지 않고 원래의 조회와 관련이 없으며, 그래프를 XML로서 프린팅할 경우에만 생성된다. 바람직하게도, 이들 참조는 원래 노드 인스턴스로의 메모리 포인터이다.
따라서, 이 QIL 그래프는 볼드체로 강조된 22개의 고유한 노드 및 5개의 참조를 (2개는 $c의 정의에, 2개의 Tuple의 장소 절에, 그리고 하나는 Tuple의 리턴 절에) 포함한다.
또 하나의 예로서, 다음의 XQuery를 고려한다.
이는 다음의 XQuery와 등가이고,
이들 양자는 다음의 QIL 표현으로 표현될 수 있다.
원래의 문서 foo.xml이 다음의 XML을 구비하면,
QIL 및 XQuery의 이 예는 표 3에 도시한 중첩형 튜플 공간을 생성한다.
단순한 XQuery에 대한 튜플 공간
이 예의 데이터 모델은 리스트들의 리스트들을 포함하지 않기 때문에, N개의 칼럼을 가진 표를 포함하는 칼럼은, 원하는 대로 로우를 확장하고 복사하여, 이들 N개의 칼럼으로 대체될 수 있다. 따라서, 이 튜플 공간은, 일련의 비중첩 연산을 통해, 표 4의 "평면화된" 튜플 공간과 등가가 된다.
단순한 XQuery에 대한 평면화된 튜플 공간
QIL의 실행은 예상되는 문서 순서로 x/y에 대해 반복하여 5개의 </z> 요소를 생성한다.
튜플 공간 연산자로서 분류된 한 세트의 연산자들을 표 5를 참조하여 다음에서 설명한다. 튜플은 변수 바인딩(할당 또는 반복)을 도입하고, 그것을 장소 절로 필터링하며, 결과 표현을 리턴한다. 리턴된 결과 자체가 Tuple일 경우, 결과를 외적하거나 조인한다.
2 종류의 반복자 노드, FOR 및 LET가 존재한다. LET은 단순히 변수 할당이며, 갯수 1을 가진다. FOR는 각 멤버를 차례로 바인딩하며 시퀀스에 대해 반복한다. 따라서, FOR의 갯수는 그 바인딩의 길이이다. 튜플 공간의 갯수는 기껏해야 그 반복자의 갯수×그 리턴 절의 갯수이다. 튜플 공간의 각 항목에 대해, 장소 절이 평가되며, 참이면, 리턴 절이 평가되어 리턴된다. 튜플의 결과는 (공백 시퀀스일 수도 있는) 이들 리턴 값 모두의 시퀀스 연결이다. 튜플에 도입될 경우, 각각의 반복자는 모든 장소 절과 리턴 절에 대한 범위내에 있다. LET 반복자는 그 인자의 노드 식별 정보(node identity)를 보존한다. 이러한 복잡함을 제외하면, QIL은 (LET가 그 바인딩으로 그리고 그 반대로 대체될 수 있음을 의미하는) 참조적 투명이다.
POSITIONOF 연산자가 반복자에 적용될 수 있다. 이는 그 바인딩내에서 반복자의 현재 위치를 결정한다. 이 위치는 1-베이스의 인덱스이다. LET 반복자의 POSITIONOF는 항상 1이다. FOR 반복자의 POSITIONOF는 1 과 그 길이 사이이다.
튜플 공간 연산자
리터랄 연산자
이하에서는 그리고 표 6에서는 리터랄 연산자로 분류된 한 세트의 연산자들을 설명한다. 리터랄은 상수를 표현한다. 단일 클래스, QILLiteral이 (QILNode 자체를 사용하여 표현되는 부울 및 QILName을 사용하여 표현되는 Name을 제외한) 모든 리터랄 타입을 표현한다. 리터랄 값은 오브젝트로서 저장된다.
리터랄 연산자
부울 연산자
다음에서는 그리고 표 7에서는 부울 연산자로 분류된 연산자들의 한 세트를 설명한다. 바람직하게도, QIL은 CONDITIONAL(implication;->) 뿐만 아니라 종래의 2치 논리 연산자 AND, OR, 및 NOT을 지원한다. 바람직하게도, IsEmpty와 Tuple의 조합을 통해 범용의 경험적 양자화(universal and existential quantification)가 실현된다.
QIL은 보통의 결합 형태, 보통의 비결합 형태, 및 일종의 스위치에 대한 편의 연산자(convenience operators)를 지원한다. AND 및 OR의 경우, 양자의 피연산자는 부울 단항(Boolean singletons)인 것이 바람직하다. NOT 연산자의 피연산자는 부울 단항인 것이 바람직하다.
연산자 CONDITIONAL의 경우, 조건 표현(QILTernary 노드의 왼쪽 속성)은 부울 단항인 것이 바람직하고, 참/거짓 분기(각각 중앙 및 오른쪽 속성)는 임의 타입일 수 있다. 다른 분기는 선택적이지 않다. 그러나, 대개는 "더미(dummy)" 분기 효과를 실현하기 위해 공백 리스트를 사용할 수 있다. 전반적인 표현의 타입은 참/거짓 분기 타입들의 합집합(union)일 수 있다.
피연산자를 부울로 강제하기 위해, 애플리케이션의 필요에 따라, XQUERYEBV 또는 CONVERT와 같은 연산자를 사용할 수 있다.
부울 연산자
시퀀스 연산자
다음에서는 그리고 표 8에서는 시퀀스 연산자로 분류된 한 세트의 연산자들을 설명한다. 바람직하게도, 모든 QIL 표현은 어떤 갯수의 순서 시퀀스(ordered sequence)이다. 시퀀스로 작업하기 위해, XQuery는 다수의 연산자 및 집합자를 정의한다. LIST 연산자는 그 멤버에 대한 시퀀스 연결을 수행한다. 공백 리스트는대부분의 타입을 None으로 설정하고, 그렇지 않으면, 리스트의 타입은 그 멤버의 모든 타입에 대한 합집합이다. LIST는 식별 정보 또는 복사 값에 의해 복사 노드를 제거하지 않는다. 시퀀스로부터 복사본을 제거하기 위해, 개별적인 연산자들(DISTINCT, DISTINCTBYVALUE) 중 하나를 명시적으로 적용할 수 있으며, 그렇지 않으면, SET 연산자를 사용할 수 있다.
RANGE는, XQuery TO 연산자와 유사하게, 왼쪽 경계에서 오른쪽 경계 사이 정수들의 연속적인 시퀀스를 지시한다. 오른쪽 경계가 왼쪽 경계 미만이면, 시퀀스는 감소하는 중이다. 이들이 동일하면, 시퀀스는 하나의 멤버(그 값)를 갖는다.
NTIMES는, 왼쪽 피연산자는 임의 타입일 수 있고 오른쪽 피연산자는 음이 아닌 정수의 단항인 것이 바람직한 2진 연산자이다. 이는 왼쪽 연산자를 N번 포함하는 시퀀스를 생성하는데, N은 오른쪽 피연산자의 값이다. 이는 원래의 것을 복사하지 않는다. (NTIMES left right)는 (Tuple (For(Range 1 Right))(True)(Left))의 표현과 등가이다.
DISTINCT는 리스트로부터 (식별 정보에 의해) 복사 노드를 제거한다. 노드가 제거되는 순서는 구현-정의되는 것(implementation-defined)이 바람직하다.
DISTINCTBYVALUE는 그 첫번째 인자로서 시퀀스에 대한 FOR 반복자를 취하는데, 이는 참조를 위한 두번째 인자의 범위내이다. 두번째 인자는, 복사본 제거에 이용할 값들의 계산 방법을 특정한다.
UNION, INTERSECTION, 및 DIFFERENCE 연산자들은, 복사본을 제거하기 위한 노드 식별 정보를 사용하여, 대응되는 세트 연산자들을 수행한다. 이들의 피연산자는 노드 시퀀스일 수 있다. 세트 차이는 비대칭적이고, 2개 시퀀스(A 및 B)의 차이가 대칭적일 경우, 이들의 쌍 차이에 대한 UNION(Union (Difference A B) (Difference A B)), 또는 등가적으로, 이들의 INTERSECTION을 이용해 이들 UNION의 DIFFERENCE(Difference (Union A B) (Intersection A B))를 취할 수 있다.
수치 집합 함수(AVERAGE, SUM, MINIMUM, MAXIMUM)는 수치값의 시퀀스인 것이 바람직한 피연산자를 갖는다. 이들은 시퀀스의 모든 멤버들이 공통적인 타입이 되게한 다음, 적절한 함수를 계산한다. 예를 들어, (Average (Decimal 1.0)(Int32 3))은 (Decimal 2.0)이다. 공백 시퀀스에 적용되는 4개의 연산자 모두 공백 시퀀스를 초래한다.
대부분의 이들 연산자의 경우, 전반적 표현 타입은 그 인자에 의존한다. 예를 들어, 속성들의 시퀀스와 요소들의 시퀀스에 대한 합집합은 그 NodeKind로서 2종류의 합집합을 갖는다. 그룹 시퀀스 연산자 모두는 임의 갯수의 피연산자를 수용한다.
시퀀스 연산자
산술 연산자
다음에서는 그리고 표 9에서는 산술 연산자로 분류된 한 세트의 연산자들을 설명한다. 산술 연산자는 이들 피연산자의 타입에 따라 달라지는 거동을 갖는다. 모든 산술 연산자는, 이들의 피연산자가 동일한 (수치) 타입 및 갯수 1을 가질 것을 요구한 다음, 그 타입에서 산술 연산을 수행한다. 나눗셈은 이들 규칙에 대한 하나의 예외이다. DIVIDE는 항상 정수의 피연산자가 2배수(double)가 되게 한다. INTEGERDIVIDE는 정수 나눗셈을 수행하며, 그에 따라, 그 피연산자는 정수이다.
오버플로우 및 언더플로우와 같은 산술적 예외는 구현-정의된다. 부동점 타입의 경우, NaN은 비신호(non-signaling)이고, 무한대 및 음의 제로가 허용된다.
산술 연산자는 비-수치 타입이나 비-단항에 대해 정의되지 않는다. 스트링에 대해 연산하기 위해서는, (STRCONCAT와 같은) 스트링 연산자를 사용하거나 이들을 수치 타입으로 변환할 수 있다.
수치들의 시퀀스에 대해 산술 연산을 수행하기 위해, TUPLE을 사용하여 시퀀스 전체를 반복하고 멤버식 연산을 수행하거나, 그렇지 않으면, SUM과 같은 시퀀스 집합의 일부를 사용하는 것을 고려할 수 있다.
산술 연산자
스트링 연산자
다음에서는 그리고 표 10에서는 스트링 연산자로 분류된 한 세트의 연산자들을 설명한다. 스트링 연산자들은 연결 및 서브스트링 매칭과 같은 공통적인 스트링 기능을 제공한다.
STRLENGTH는 스트링의 길이를 계산한다. 그 인자는 단항 스트링인 것이 바람직하다. STRCONCAT는 LIST와 같은 가변-인자 연산자이다. 이는 그 인자를 단일스트링으로 연결한다. 각각의 인자는 스트링들의 리스트 또는 공백 리스트일 수 있다. 이는 공백 리스트를 공백 스트링으로 취한다. STRCONCAT는 선택적인 스트링 속성, Delimiter를 수용하는데, 이는 공백 스트링으로 디폴트된다. 이는 스트링 멤버들의 매 쌍 사이에 구분자 값(delimiter value)을 삽입한다. STRCONCAT( (), () )는 여전히 공백 스트링인 한편, STRCONCAT("", "")는 구분자를 초래한다.
STRSUBSTRING 노드 연산자는 스트링의 서브스트링을 계산한다. 제 1 인자는 단항 스트링이어야 하고, 제 2 및 제 3 인자는 단항 정수인 것이 바람직하다. 이는 0 또는 (i0라 하는)제 2 인자의 최대값 및 0 또는 (i1라 하는)제 3 인자의 최대값을 취하며, i0과 i0+i1 사이의 문자로 이루어진 서브스트링을 계산한다.
STRCONTAINS는 인자로서 2개의 단항 스트링을 취하고, 제 1 스트링이 제 2 스트링을 포함하면 참을 리턴하고, 그렇지 않으면, 거짓을 리턴한다. 모든 스트링은 공백 스트링을 포함한다. STRENDSWITH 및 STRBEGINSWITH는 동일한 기능을 갖지만, 그 매칭은 각각 스트링의 끝 또는 시작에 나타나도록 제한된다.
스트링 연산자
값 비교 연산자
다음에서는 그리고 표 11에서는 값 비교 연산자로 분류된 한 세트의 연산자들을 설명한다. QIL은 값을 비교하기 위한 수개의 연산자들을 정의한다. 이들은 동일한 이름을 가진 XQuery의 값 비교 연산자들(EQ, NE, LT, LE, GT 및 GE)에 대응된다. 다음에서는 노드 비교 연산자를 설명한다.
각각의 피연산자는 단항인 것이 바람직하며, 양자의 피연산자는 동일한 타입을 갖는 것이 바람직하다. 필요한 피연산자로 만들거나 변환하기 위해, TREAT, CONVERT, 또는 다른 타입의 연산자를 사용할 수 있다.
스트링 비교는 보통 조합(collations)을 고려해야 한다. 시퀀스들은, 경험적, 범용, 최초, 멤버식 등 상이한 많은 방법으로 비교될 수 있다.
값 비교 연산자
노드 비교 연산자
다음에서는 그리고 표 12에서는 노드 비교 연산자로 분류된 한 세트의 연산자들을 설명한다. QIL은 식별 정보 또는 문서 순서에 의해 노드를 비교하는 수개의 연산자들을 정의한다. 이들은 XQuery의 노드 비교 연산자(IS, ISNOT, BEFORE(<<), 및 AFTER(>>))에 대응된다.
BEFORE(AFTER)는 왼쪽의 피연산자가 문서 순서에서 오른쪽 이전(이후)에 나타나면 참을 리턴한다. 상이한 문서들로부터의 (또는 문서들에 존재하지 않는) 노드에 대해, 순서는 조회의 실행내에서 정의되며 안정하지만, 그렇지 않으면 구현-정의된다.
각각의 피연산자는 단항 노드인 것이 바람직하다. 노드 타입 IS는, 2개의 피연산자가 (식별 정보에 의한) 동일 노드이면 참을 리턴하고, 그렇지 않으면 거짓을 리턴한다. ISNOT은 그 반대를 리턴한다. BEFORE/AFTER의 정의로부터, BEFORE및 AFTER 모두가 2개의 노드에 대해 거짓을 리턴할 경우에만 이들이 동일한 식별 정보를 갖는 것이다. 따라서, (IsNot $x $y)는 (Or (Before $x $y) (After $x $y))와 등가이다. 시퀀스는 경험적, 범용, 최초의, 멤버식 등 상이한 많은 방법으로 비교될 수 있다.
노드 비교 연산자
정렬 및 조합 연산자
다음에서는 그리고 표 13에서는 정렬 및 조합 연산자로 분류된 한 세트의 연산자들을 설명한다. QIL은 2개의 인자를 취하는 하나의 SORT 노드 또는 연산자를 정의한다. 제 1 인자는 정렬될 집합에 대해 FOR 반복자를 도입한다. 이 반복자는 정렬 키(sort key)를 표현하는 제 2 인자에 대한 범위내에 있다.
각각의 정렬 키는 ASCENDING이거나 DESCENDING이다. 키 표현은 DOCUMENTORDER와 같은 상수이거나 더 복잡한 표현일 수 있다.
DOCORDERDISTINCT는 문서 순서에 의해 시퀀스를 정렬하며 식별 정보에 의해 복사 노드를 제거하는 편의 연산자이다. (DocOrderDistinct $x)는 (Distinct(Sort X (Ascending DocOrder)))와 등가이다. 그것의 피연산자는 공백일 수 있는 노드 시퀀스여야 한다.
정렬 및 조합 연산자
함수 정의 및 호출 연산자
다음에서는 그리고 표 14에서는 함수 정의 및 호출 연산자로 분류된 한 세트의 연산자들을 설명한다. QIL은 함수 정의와 호출 모두를 표현할 수 있다. 호출은, 그 자체가 QIL을 사용해 정의된 함수의 호출, 실행 함수에 내장된 호출, 및 임의적인 방법의 이른-경계(early-bound)와 늦은-경계(late-bound) 양자의 호출(예를 들어, XSLT 확장 오브젝트)과 같은 여러가지 형태를 가진다.
인자는 정위치인 것이 바람직하다. QIL을 통해 이름 호출 의미론(call-by-name semantics)을 터널링할 필요가 있으면, 모든 이름을 위치에 매핑하거나 그렇지 않으면, (XSLT 컴파일러가 하는 것처럼) 값들을 이용해 (ms:variables()이 procs에 저장된 SQLXML에 대해 하는 것처럼) 이름을 짝짓는 구조를 구성하고 QIL로 이름 매칭 알고리즘을 인코드해야 할 수도 있다.
호출은 LET 반복자의 어레이를 사용해 인자를 전달한다. FUNCTION 정의에서, 이들 반복자는, 그 값이 실행시에 외부적으로 공급되는 기호적 참조로서 동작하는 널에 한정된다.
함수 정의 및 호출 연산자
XML 네비게이션 연산자
다음에서 그리고 표 15에서는 XML 네비게이션 연산자로 분류된 한 세트의 연산자들을 설명한다. 경로-스타일 네비게이션은 QIL에 구문적으로 보존되지 않고, 튜플 공간 및 네비게이션 연산자로 풀어진다.
일반적으로 말해서, QIL의 네비게이션은 CONTENT 노드 연산자를 사용해 수행된다. 이 연산자는 노드내의 모든 내용(예를 들어, 모든 속성, namespace, 텍스트, 프로세싱-명령, 주석, 및 요소내의 요소 노드들)을 선택하는 것이 바람직하다.그 다음, 내용 시퀀스는 (예를 들어, TUPLE 및 ISTYPE을 사용하는) 소정 노드 종류들만을 선택적으로 보존하도록 필터링될 수 있다.
ATTRIBUTE 연산자는 패턴 인식에서의 편의를 위해 공급되며, 이름(오른쪽 피연산자)으로, 0 또는 1의 속성 노드에 매칭되는 속성 노드를 선택한다. 다른 네비게이션 노드는 그래프에서의 공통적인 방향을 위해 제공되는데, 이들은 대부분 XPath로부터 취해지며 동일한 의미를 갖는다. 모든 연산자는, 노드의 전체 시퀀스에 적용되기 위해 한번에 하나의 노드에 적용되는데, 노드 시퀀스에 대한 반복을 위해 TUPLE을 사용할 수 있다. 한가지 예외는, 인자가 하나의 ID 값이어야 하는 DEREF이다. 이는 id() 룩업의 결과를 계산한다.
XML 네비게이션 연산자
XML 구성 연산자
다음에서 그리고 표 16에서는 정렬 및 조합 연산자로 분류된 한 세트의 연산자들을 설명한다. QIL은 모든 XML 노드 종류를 구성하기 위한 연산자를 정의한다.이들 구성자 모두는 보통의 XML 데이터 모델 제약을 따른다. 예를 들어, 문서 노드를 포함할 수 있는 노드는 없으며, 연속적인 텍스트 노드가 합병된다.
구성된 모든 노드는 고유한 식별 정보를 갖는 것이 바람직하다. 이 식별 정보는 XQuery에 대한 것과 유사하게 QIL에 대해 정의된다. 이는 LET와 같은 연산자를 통해 보존되며, 역효과를 가진 연산자, 특히 DML에 의해 중요시되어야 한다.
구성된 모든 노드는 다른 모든 노드에 관계되는 순서를 갖게 된다. 이는 문서가 아닌 노드 및 상이한 문서들로부터의 노드에 적용되지만, "문서 순서"라 명명된다. 이 순서는 XQuery에 대한 것과 정확히 동일하게 QIL에 대해 정의된다.
ELEMENTCTOR 연산자
ELEMENTCTOR는 클래스 QilBinary를 사용해 구현된다. 왼쪽의 피연산자는 이름이고, 오른쪽 피연산자는 내용이다. 내용의 임의 노드가 문서 노드이면, 이는 오류일 수 있다. 내용의 모든 노드가 암시적으로 복사된다.
ATTRIBUTE 및 NAMESPACE 노드는 요소의 다른 비속성/namespace 내용 이후에 구성되지 않을 수 있다. 이러한 상황에서의 거동은 구현-정의된다. 요소 이름이 namespace내에 있으며 namespace가 범위내가 아니라면, 구현은 종합된 namespace 선언 및/또는 프리픽스(prefix)를 방출할 수 있다. 구현은 이름의 프리픽스 값을 존중할 필요가 없으며, 이는 직렬화 힌트일 뿐이다.
ATTRIBUTECTOR 연산자
ATTRIBUTECTOR는 QilBinary 클래스를 사용해 구현된다. 왼쪽의 피연산자는 이름이고, 오른쪽의 피연산자는 내용이다. 오른쪽 피연산자는XQUERYATTRIBUTECONTENT와 같은 연산자를 사용해 소정 표현으로 강제될 수 있다. 속성 이름이 namespace내에 있고 namespace가 범위내가 아니라면, 구현은 종합된 namespace 선언 및/또는 프리픽스를 방출할 수 있다. 구현은 이름의 프리픽스 값을 존중할 필요가 없으며, 이는 직렬화 힌트일 뿐이다. 타입형 속성을 구성하기 위해, 그것을 XML Schema 타입 정보로 마크하거나 XQUERYVALIDATE와 같은 타입 연산자를 적용할 수 있다.
TEXTCTOR 및 CDATACTOR 연산자
TEXTCTOR는 QilUnary 클래스를 사용해 구현된다. 자식 피연산자는 텍스트 내용이고 스트링-타입의 단항이어야 한다. CDATACTOR는 선택적인 직렬화 힌트를 지시하는 (즉, CDATA 섹션을 사용하는) TEXTCTOR이다. 구현은 이 힌트를 무시할 수 있다.
COMMENTCTOR 연산자
COMMENTCTOR는 QilUnary 클래스를 사용해 구현된다. CLASS 피연산자는 텍스트 내용이고, 스트링-타입의 단항이어야 한다.
PICTOR 연산자
PICTOR는 QilBinary 클래스를 사용해 구현된다. 왼쪽의 피연산자는 타깃 NCNAME이고, 널일 수 있다. 그렇지 않으면, 이는 QName-타입의 단항이어야 한다. 오른쪽의 피연산자는 나머지 내용이고, 스트링-타입의 단항이어야 한다.
NAMESPACEDECL 연산자
NAMESPACEDECL은 QilBinary 클래스를 사용해 구현된다. 이는 namespace 선언을 구성한다. 왼쪽의 피연산자는 프리픽스이고 QName-타입의 단항인 것이 바람직하다. 오른쪽의 피연산자는 namespace이고, 스트링-타입의 단항인 것이 바람직하다. 왼쪽의 피연산자가 공백 스트링이면, NAMESPACECTOR는 디폴트 namespace 선언에 대응된다.
충돌하는 namespace 선언(예를 들어, 요소 내용에서의 동일한 프리픽스에 대한 2개의 NAMESPACECTOR, 또는 이미 방출된 프리픽스 이름과 충돌하는 NAMESPACECTOR)이 발생하면, 이 거동은 구현-정의된다.
RTFCTOR 연산자
RTFCTOR은 QilUnary 클래스를 사용해 구현되며, 그 자식은 노드 시퀀스 또는 공백 시퀀스인 것이 바람직하다. 이는 (XSLT로부터) 결과-트리-단락(result-tree-fragment)을 구성한다. 효과적으로, RTFCTOR은 조합의 발생을 방지하는, 네비게이션에 대한 장벽이다. 많은 측면에서, 이는 노드보다는 원자 값처럼 거동한다.
XML 구성 연산자
노드 속성 연산자
다음에서는 그리고 표 17에서는 노드 속성 연산자로 분류된 한 세트의 연산자들을 설명한다. QIL은 이름과 같은 소정 노드 속성을 액세스하기 위한 연산자를 지원한다.
NAMEOF 연산자는 노드의 QName을 계산한다. 노드가 이름을 갖지 않으면, 이는 공백 시퀀스를 리턴한다. LOCALNAMEOF, NAMESPACEOF, 및 PREFIXOF 연산자는 노드 이름의 대응되는 부분을 계산한다. 노드가 이름을 갖지 않거나 이들 부분 중 하나를 상실하면, 이들은 공백 스트링을 리턴한다. 이들 연산자 모두는 그들의 피연산자가 단항 노드일 것을 요구한다.
노드 속성 연산자
복사 및 투영 연산자
다음에서는 그리고 표 18에서는 복사 및 투영 연산자로 분류된 한 세트의 연산자들을 설명한다. QIL은 몇가지 종류의 복사 및 투영 연산자를 지원한다. 복사는, 바람직하게도 원자 값에 영향을 미치지 않는 연산이다. 노드에 대한 영향은 실질적으로 원래의 것과 정확히 동일하지만 새로운 노드 식별 정보를 가진 복사를 생성한다. 투영은 노드 식별 정보를 "보존"하지만, 그 내용의 일부만을 유지하도록 노드를 선택적으로 간결화한다.
DEEPCOPY는 노드에 의해 헤드된(headed) 전체 서브그래프의 복사를 구성한다. SHALLOWCOPY는, 문서의 경우, 이는 그 내용이 아닌 문서 노드를 복사하고, 요소의 경우, 이는 그 내용이 아닌(즉, 속성이 아닌) 요소 노드(즉, 그 이름)를 복사하기 때문에, 요소 및 문서 노드 이외의 모든 노드 종류에 대해서는 DEEPCOPY와 동일하다.
PROJECTINCLUDE 및 PROJECTEXCLUDE 모두는 이진 연산자이다. 왼쪽의 피연산자는 노드의 시퀀스에 대한 FOR 반복자여야 한다. 오른쪽의 피연산자는 그 반복자를 참조할 수 있는 부울 단항이어야 한다. 양자의 연산자는 왼쪽의 피연산자에 의해 설명된 포리스트(forest)에 대해 순환적으로 반복하고, 모든 노드 및 오른쪽 피연산자가 참이라 평가하는 그들의 모든 조상들을 각각 포함하거나 제외함으로써, 투영을 수행한다.
복사 및 투영 연산자
타입 연산자
다음에서는 그리고 표 19에서는 타입 연산자로 분류된 한 세트의 연산자들을 설명한다. QIL은 동적으로 QIL 타입 시스템과 작업하는 많은 연산자들을 정의한다.
타입 연산자
ATOMIZE 연산자
ATOMIZE는 XQuery 표준에 설명된 XQuery 원자화 규칙을 수행함으로써 XML 노드의 타입 값을 효과적으로 검색한다. 특히, ATOMIZE는 임의 갯수의 시퀀스를 취하고, 원자 값이 무연산이며, 정형화된-값 접근자(typed-value accessor)로의 호출과 같은 노드의 경우, 원래 시퀀스의 멤버에 대한 원자 값들로 이루어진 새로운 시퀀스를 리턴한다. 예를 들어, (XQueryAtomize (List (1 "b" 3))은 변경되지 않은 리스트를 초래하는 반면, $x는 정형화된 값 (1, 2)를 가진 노드이고 $y는 정형화된 값 (3, 4)를 가진 노드인 (XQueryAtomize (List $x $y))는 조합된 시퀀스(1, 2, "3", 4)를 초래한다.
TREATAS 연산자
QIL은 강하게 그리고 정적으로 정형화되기 때문에, 표현이 정적인 것보다 더 강하거나 약한 타입이 바람직할 수 있다. 예를 들어, 2배수는 표현이 정수인 경우에 바람직할 수 있다. 이러한 (예를 들어, 업캐스팅하거나 다운캐스팅하는) 경우, TREATAS는 표현을 바람직한 타입이나 갯수로 강제하는데 사용될 수 있다.
TREATAS는 속성 및 타입을 취한다. 이는 속성을 그 타입을 갖는 것으로 취급하려 한다. 동적 효과는 아무것도 하지 않거나 (즉, 값이 변경없이 유지되거나) 오류가 생기는 것이다. 정적 효과는 표현의 정적 타입을 변경하는 것이다. Convert 또는 XQuery Validate와 달리, 타입 계층구조를 통해 이동하는 것은 불가능하며, 파싱은 수행되지 않는다. 예를 들어, 스트링을 정수로 취급하려는 것이나 10진수를 2배수로 취급하려는 것은 오류이다.
타깃 타입의 모든 속성이 사용된다. 타깃 타입의 속성이 인자 타입의 속성과 동일하면, 작업이 수행되지 않는다. 속성이 상이하면, 그 효과는 다음과 같다. 인자 갯수가 타깃 갯수와 호환이면, 그 값은 변경없이 리턴된다. 그렇지 않으면, 오류가 발생할 수 있다. 표 20은 갯수 호환성을 설명한다. 인자의 (정확한, 동적) 갯수는 왼쪽이고, (정적인) 타깃 갯수는 위쪽이다. "OK"는 TREATAS가 성공임을 의미하고, "err"은 그것이 실패임을 의미한다.
갯수 호환성
인자 항목의 종류가 타깃 항목 종류와 호환이면, 그 값은 변경없이 리턴된다. 그렇지 않으면, 오류가 된다. 표 21은 항목 종류 호환성을 설명한다.
항목 종류 호환성
인자의 원자 타입이 타깃의 원자 타입과 호환이면, 그 값은 변경없이 리턴된다. 그렇지 않으면, 오류가 발생할 수 있다. 이러한 호환성은, 하나가 리스트/합집합에 의해서가 아니라 제약에 의해 다른 것으로부터 전승될 경우에만, 2개의 타입이 호환인 서브타입 대체 규칙에 의해 결정된다. 타깃 타입이 엄격하지 않으면, 인자 타입이 정적인 것의 서브타입인지의 여부를 결정하기 위해 XML 타입 정보를 살필 수 있다. 그렇지 않으면, 이는 QIL 원자 타입으로부터 결정될 수 있다. 타깃 노드 종류와 비트식으로 OR된 인자 노드 종류가 0이면, 오류가 발생할 수 있다. 그렇지 않으면, 노드 종류는 호환적이다.
마지막으로, 타깃 타입이 엄격하지 않으면, 엄격도(strictness)는 체크되지 않는다. 타깃 타입은 엄격하고 인자 타입이 엄격하지 않으면, 인자는 동적으로 엄격한 타깃 타입을 가져야 하고 그렇지 않으면 오류가 발생할 수 있다.
CANTREATAS 연산자
CANTREATAS는, TREATAS가 성공이면 참을 리턴하고, 그렇지 않으면(TREATAS가 오류이면), 거짓을 리턴한다. 이 연산자는 주로 CONVERT/ISCONVERTIBLE과의 대칭을 위해 존재한다.
CONVERT 연산자
CONVERT는 한가지 타입의 값으로부터 다른 타입의 값으로의 데이터 타입 변환에 적용된다. 예를 들어, (Convert (String "1") Int32)는 정수 1을 초래한다. CONVERT는, 이미 값을 가지고 있거나 값을 갖도록 촉구될 수 있는 타입으로만 캐스트(cast)될 수 있는 TREATAS와 상이하다.
적용되는 특정 타입 변환은 XQuery에 의해 사용되는 것들과 매칭된다.
ISCONVERTIBLE 연산자
ISCONVERTIBLE은, CONVERT가 성공이면 참을 리턴하고, 그렇지 않으면(CONVERT가 오류이면), 거짓을 리턴한다. 이는 일반적으로 CONVERT를 수행하는 것만큼 비용이 들지만, 오류로 계산을 종료하는 대신에 조건 분기를 허용한다. 이 연산자는 주로 XQuery CASTABLE 연산자를 지원하기 위해 존재한다.
ISTYPE 연산자
ISTYPE은, 값이 지시된 타입을 가지면 참을 리턴한다. 타입 스위치 및 등가를 구현하는데 유용하다. QilType의 각 태양에 대해, 항상 모든 값과 매칭되는 와일드카드 값(wildcard value;예를 들어, QilCardinality.Any, QilAtomicType.Any 등)이 존재한다. 따라서, 예를 들어, 표현이 임의 타입의 요소인지를 테스트하기 위해, XmlNodeKind가 QilXmlNodeKind.Element이고 다른 모든 값은 와일드카드인 QilType을 사용할 수 있다. 표현이 소정 갯수를 갖는지의 여부를 테스트하기 위해, 갯수가 그 값이고 그 타입의 다른 모든 측면이 와일드카드인 QilType을 사용할 수 있다.
ISEMPTY 연산자
(QilCardinality.Zero를 사용하는)ISTYPE과 마찬가지로, 이 연산자는, 시퀀스가 공백이면 참을 리턴하고, 그렇지 않으면, 거짓을 리턴한다.
XQuery 연산자
다음에서는 그리고 표 22에서는 XQuery 연산자로 분류된 한 세트의 연산자들을 설명한다. 소정 언어는 다른 QIL 연산자들을 사용해 표현될 수 없는 부가적 연산자들을 갖거나, 그렇지 않으면, 너무나 공통적이어서 그들만의 노드 타입을 가질만하다.
XQUERY 연산자
XQUERYEBV 연산자
이 단항 연산자는 값들의 시퀀스를 취하며, XQuery 스펙에 설명된 규칙에 따라, 이를 부울 값으로 변환한다.
특히, 이는, 피연산자가 공백 시퀀스, 부울 값 거짓, 공백 스트링, 0(임의의 수치 타입), 또는 NaN(부동상의 2배수)이면, 거짓을 리턴한다. 그렇지 않으면, 참을 리턴한다.
XQUERYELEMENTCONTENT 연산자
XQUERYELEMENTCONTENT는 그 인자로서 시퀀스를 취하며, 노드의 시퀀스를 리턴한다. 원래 시퀀스의 각 노드가 보존되며, 인접한 원자 값의 각 시퀀스는 분할 공간과 연결된 원자 값을 포함하는 텍스트 노드로 변환된다.
XQUERYATTRIBUTECONTENT 연산자
XQUERYATTRIBUTECONTENT는 그 인자로서 시퀀스를 취하며, 스트링 값을 리턴한다. 원래 시퀀스의 각 노드가 그 스트링 값으로 대체되며, 각각의 원자 값 또한 스트링으로 변환된다. 그 다음, 얻어진 원자 값의 시퀀스는 분할 공간과 연결된다.
XQUERYVALIDATE 연산자
XQUERYVALIDATE 연산자는 노드의 시퀀스를 확인하여, 확인 오류나 그렇지 않으면 타입-주석형 노드(type-annotated nodes)의 새로운 시퀀스를 초래한다. 이는 XQuery VALIDATE 연산자와 동일한 의미를 가진다.
XPath 연산자
다음에서 그리고 표 23에서는 XPath 연산자로 분류된 한 세트의 연산자들을 설명한다. XPath는 부가적인 네비게이션 축 및 어떤 타입 변환을 표현하는데 필요한 소수의 연산자를 갖는다. 이들 중 일부는 기존의 QIL 연산자를 사용해 표현될 수 있지만, 이들만의 표현을 취할 수 있을 정도로 충분히 공통적이다.
XPATHNODEVALUE, XPATHNUMBERTOSTRING, 및 XPATHSTRINGTONUMBER는 XPath 타입 변환 규칙을 구현한다. 3가지 모두는 단항 연산자이다. XPATHNODEVALUE로의 피연산자는 단항 노드여야 한다. XPATHNUMBERTOSTRING으로의 피연산자는 단항의 수치 타입이어야 한다. XPATHSTRINGTONUMBER로의 피연산자는 단항의 스트링이어야 한다.
다른 연산자는 네비게이션을 수행한다. 모두는, 피연산자가 단항 노드여야하는 단항 연산자이고, 이들은 네비게이션 연산에 의해 도달되는 노드들의 기대 시퀀스를 초래한다.
XPath 연산자
DML 연산자
다음에서는 그리고 표 24에서는 DML 연산자로 분류된 한 세트의 연산자들을 설명한다. QIL은 삽입, 삭제, 및 업데이트와 같은 데이터-변경 연산을 표현할 수 있다.
XQuery DML 문법은 DML 문장을 허용하는 XQuery 문법의 조건부 곱을분기(branch)로 변경한다. 이는 조건문을 위한 QIL 표현으로 변경할 것을 요하지 않으며, 컴파일러는 DML 표현을 조건부 노드의 참/거짓 분기로 배치한다. 또한, XQuery DML 문법은 DML 문장을 허용하는 FLWR 표현을 보통의 리턴 절에 나타나도록 변경한다. FLWR 표현의 QIL 표현(Tuple)은 TUPLE 노드의 리턴 멤버이다. XQuery DML 문법은 4개의 새로운 연산자, INSERT, UPDATE, DELETE, 및 REPLACE를 부가한다. 표 24에 열거된 QIL 연산자는, XQuery DML 스펙에 의해 정의된 바와 동일한 의미를 이용해, 이들을 표현한다.
DML 연산은 리턴값을 갖지 않으므로, 이들은 대응되는 QILDataType을 갖지 않는다. QilItemKind.Dml값은 컴파일러 및 최적화기에서의 정적 타입 체킹을 용이하게 하는 DML 표현 타입을 나타낸다. QIL 표현이 DML을 수행할 수 있는지의 여부를 테스트하기 위해, 최상 모드의 MemberKind를 살펴봐야 한다.
DML 연산자
특수 연산자
다음에서는 그리고 표 25에서는 특수 연산자로 분류된 한 세트의 연산자들을 설명한다. NOP 노드 타입은 주로 주문형 QIL 구성을 지원하거나 QIL의 하향식 구성을 용이하게 하기 위해 존재한다. 예를 들어, 개발자는 NOP 노드를 그래프에 배치하고 구성이 개발됨에 따라 나중에 그 내용을 확정할 수 있다. 노드 타입은 여전히 적절하게 설정되어야 한다.
UNKNOWN 노드 타입은 주로 컴파일-시간 동안 부분적으로 구성된 QIL을 지원하고 애플리케이션이 그들만의 목적을 위해 QIL을 "재사용"하도록 하기 위해 존재한다. 기본적으로, UNKNOWN은 정의된 의미를 갖지 않는 불명료한 노드 타입이고, 임의의 클래스를 사용하여 표현될 수 있다.
ERROR 노드 타입은 2개의 인자를 취한다. 첫번째는 스트링 시퀀스여야 하고 사용자에 대한 메시지를 기술한다. 두번째는 부울 단항이어야 하고, 참일 경우, 그 오류가 치명적임을 지시한다(re:terminate execution). 거짓일 경우, 실행은 메시지 이후에 계속될 수 있다.
피연산자의 타입 또는 갯수는 제한되지 않는다.
특수 연산자
외부 데이터 소스 연산자
다음에서는 그리고 표 26에서는 외부 데이터 소스로 명명된 연산자를 설명한다. 외부 데이터의 주된 소스는 QILDATASOURCE 클래스로 구현된 DATASOURCE 노드 타입이다. 이 연산자는 (예를 들어, namespace과 같이) 데이터 소스의 종류를 설명하는 스트링 태그 값 및, QIL에 의해 번역되지 않지만 어떤 후위 프로세스에 대해 의미를 가질 수 있는 임의적인 User Data 오브젝트를 갖는다.
데이터 소스는 디렉토리 또는 파일로의 경로 이름이거나 URL 어드레스일 수 있다. 이러한 데이터 소스 타입에 대해, User Data 오브젝트는 스트링을 평가하는 QIL 노드 표현이다. 스트링 값은 (예를 들어, 문서() 호출 함수와 같은) XML 문서를 로딩하기 위한 함수를 전달할 위치를 식별한다. XML 문서는 실제 XML일 필요가 없으며, 문서는 가상 XML 타입과 같은 XML의 추상화일 수 있다.
외부 데이터 소스 연산자
결론
상술한 바와 같이, 다양한 컴퓨팅 장치 및 네트워크 아키텍처와 관련하여 본 발명의 예시적 실시예를 설명하였지만, 기본적인 개념은, XML에 대한 중간 언어 표현을 구현하기에 바람직한 임의의 컴퓨팅 장치 또는 시스템에 적용될 수 있다. 따라서, 본 발명의 방법 및 시스템은 다양한 애플리케이션 및 장치에 적용될 수 있다. 여기에서는 다양한 선택에 대한 표현으로서 예시적인 프로그래밍 언어, 이름 및 예들을 선택했지만, 이들 언어, 이름 및 예들은 한정을 위한 것이 아니다. 당업자는, 본 발명에 의해 실현되는 것과 동일하거나, 유사하거나 등가인 시스템 및 방법을 실현하는 오브젝트 코드를 제공하는 다양한 방법이 존재한다는 것을 알 수 있다.
여기에서 설명한 다양한 기술들은 하드웨어나 소프트웨어와 관련하여, 또는 적절한 경우, 양자의 조합으로 구현될 수 있다. 따라서, 본 발명의 방법 및 장치, 또는 그에 대한 소정 태양 또는 일부는, 플로피 디스켓, CD-ROM, 하드 드라이브, 또는 다른 임의의 머신-판독가능 저장 매체와 같은 유형의 매체(tangible media)에구체화된 프로그램 코드(즉, 명령어)의 형태를 취할 수 있는데, 프로그램 코드가, 컴퓨터와 같은, 머신에 로드되어 실행될 경우, 머신은 본 발명을 실행하기 위한 장치가 된다. 프로그램가능한 컴퓨터상에서 프로그램 코드를 실행할 경우, 컴퓨팅 장치는 일반적으로 프로세서, (휘발성 및 비휘발성 메모리 및/또는 저장 요소를 포함하는) 프로세서에 의해 판독가능한 저장 매체, 하나 이상의 입력 장치, 및 하나 이상의 출력 장치를 포함한다. 예를 들어, 데이터 프로세싱 API 등의 사용을 통해, 본 발명의 신호 프로세싱 서비스를 이용할 수 있는 하나 이상의 프로그램은 컴퓨터와 통신하는 고레벨의 절차적 프로그래밍 언어 또는 오브젝트 지향의 프로그래밍 언어로 구현되는 것이 바람직하다. 그러나, 프로그램(들)은, 원한다면, 어셈블리 또는 기계어로 구현될 수 있다. 어떤 경우에서든, 언어는 컴파일되거나 번역된 언어이며 하드웨어 구현과 조합될 수 있다.
또한, 본 발명의 방법 및 장치는, 전기 배선 또는 케이블, 광섬유, 또는 다른 임의 형태의 전송을 통하는 것과 같이, 어떤 전송 매체를 통해 전송되는 프로그램 코드 형태로 구체화된 통신을 통해 실행될 수도 있는데, EEPROM, 게이트 어레이, PLD(programmable logic device), 클라이언트 컴퓨터, 비디오 리코더 등과 같은 머신에 의해 프로그램 코드가 수신되고 로드되어 실행될 경우, 상기 예시적 실시예에서 설명한 바와 같은 신호 프로세싱 기능을 가진 수신 머신이 본 발명을 실행하기 위한 장치가 된다. 범용 프로세서상에 구현될 경우, 프로그램 코드는 본 발명의 기능을 호출하도록 동작하는 고유한 장치를 제공하기 위해 프로세서와 조합된다. 또한, 본 발명과 관련하여 사용된 임의의 저장 기술도 변함없이 하드웨어와소프트웨어의 조합일 수 있다.
다양한 도면의 바람직한 실시예와 관련하여 본 발명을 설명하긴 했지만, 본 발명을 벗어나지 않으면서, 본 발명과 동일한 기능을 수행하기 위해, 유사한 다른 실시예를 사용하거나 상기 실시예를 변형하고 부가할 수 있다는 것을 알 수 있다. 또한, 특히, 무선 네트워크 장치의 수가 계속적으로 급격히 증가함에 따라, 핸드헬드 장치의 운영 체제 및 다른 애플리케이션 특정의 운영 체제를 포함하는 다양한 컴퓨터 플랫폼을 생각할 수 있다. 따라서, 본 발명은 어떤 하나의 실시예에 한정되어서는 안되며, 첨부된 청구항에 따른 넓이와 범위로 해석되어야 한다.
따라서, 본 발명에 의하면, XML 및 비-XML 데이터 소스에 대한 XML 조회와 뷰를 위한 가상 XML을 구현하는 통일화된 표현을 구현하여, 복잡한 매핑에 대한 조회를, 덜 복잡한 매핑에 대한 조회를 구성하여 수행하는 덜 복잡한 문제로 구현하는 방법 및 시스템을 얻을 수 있다.

Claims (23)

  1. 관계형 및 비관계형 데이터 소스에 대한 하나 이상의 XML 언어 조회의 의미론적 표현을 위한 방법으로서,
    적어도 하나의 조회를 수신하는 단계;
    상기 적어도 하나의 수신 조회내의 모든 연산에 대해 적어도 하나의 노드 오브젝트를 정의하는 단계;
    연산자를 사용해 상기 적어도 하나의 노드 오브젝트 각각을 번역하는 단계; 및
    상기 연산자들로부터, 상기 하나 이상의 XML 언어 조회에 대한 의미를 명시하게 설명하는 의미론적 표현을 생성하는 단계를 포함하는 의미론적 표현 방법.
  2. 제1항에 있어서,
    상기 의미론적 표현은 타깃 조회 엔진에 의한 해석 및 실행을 위해 형성된 중간 언어 표현인 의미론적 표현 방법.
  3. 제2항에 있어서,
    상기 비관계형 데이터 소스는 텍스트 문서, 스프레드시트, 및 비관계형 데이터베이스 중 하나 이상을 구비하는 의미론적 표현 방법.
  4. 제1항에 있어서,
    상기 생성 단계는, 상기 수신 조회의 고레벨 연산을 명시적 부분들(explicit parts)로 분해하는 단계를 더 포함하는 의미론적 표현 방법.
  5. 제4항에 있어서,
    상기 명시적 부분들은 다수의 XML 언어에 대해 공통인 의미론적 표현 방법.
  6. 제1항에 있어서,
    상기 연산자들은 특수 연산자, 데이터 소스, 리터랄, 부울 연산자, 시퀀스 연산자, 산술 연산자, 스트링 연산자, 값 비교 연산자, 노드 비교 연산자, 튜플 공간, 함수 정의 및 호출, XML 네비게이션, XML 구성, XML 속성 접근자, 타입 연산자, 언어 특정 연산자, 및 데이터 조작 연산자들 중 하나 이상을 구비하는 의미론적 표현 방법.
  7. 제1항에 있어서,
    상기 적어도 하나의 노드 오브젝트의 그래프 데이터 구조를 형성하는 단계를 더 포함하는 의미론적 표현 방법.
  8. 제1항에 있어서,
    상기 적어도 하나의 수신 조회는 XML 조회 언어 및 XML 뷰 정의 언어 중 하나 이상을 구비하는 의미론적 표현 방법.
  9. 제1항에 있어서,
    상기 적어도 하나의 수신 조회는 XPath, XSLT, XQuery, DML, OPath, 및 Annotated Schema 조회 중 하나 이상을 구비하는 의미론적 표현 방법.
  10. 제1항에 있어서,
    상기 의미론적 언어 표현으로 인해 관계형 데이터의 XML 뷰에 대한 조회가 가능한 의미론적 표현 방법.
  11. 다수의 데이터 소스에 대한 XML 조회 및 XML 뷰 중 하나 이상의 의미를 표현하는 의미론적 해석기로서,
    조회를 형성하는 XML 조회 및 XML 뷰 중 상기 하나 이상을 수신하는 입력;
    상기 조회내의 모든 연산에 대해 노드 오브젝트를 정의하는 그래프 구조 생성기;
    각각의 노드 오브젝트에 대해, 상기 조회의 연산들을 명시적 부분들로 분해하는 연산자를 할당하는 번역기; 및
    상기 명시적 부분들을 XML 조회 및 XML 뷰 중 상기 하나 이상의 상기 의미를 표현하는 중간 언어 표현으로서 제공하는 출력을 구비하는 의미론적 해석기.
  12. 제11항에 있어서,
    상기 다수의 데이터 소스는 관계형 및 비관계형 데이터 소스를 구비하는 의미론적 해석기.
  13. 제12항에 있어서,
    상기 비관계형 데이터 소스는 텍스트 문서, 스프레트시트, 및 비관계형 데이터베이스 중 하나 이상을 구비하는 의미론적 해석기.
  14. 제11항에 있어서,
    상기 연산자들은 특수 연산자, 데이터 소스, 리터랄, 부울 연산자, 시퀀스 연산자, 산술 연산자, 스트링 연산자, 값 비교 연산자, 노드 비교 연산자, 튜플 공간, 함수 정의 및 호출, XML 네비게이션, XML 구성, XML 속성 접근자, 타입 연산자, 언어 특정 연산자, 및 데이터 조작 연산자들 중 하나 이상을 구비하는 의미론적 해석기.
  15. 제11항에 있어서,
    상기 명시적 부분들은 다수의 XML 언어에 대해 공통인 의미론적 해석기.
  16. 제11항에 있어서,
    상기 중간 언어 표현은 타깃 조회 엔진에 의한 해석 및 실행을 위해 형성되는 의미론적 해석기.
  17. 수신 조회의 중간 언어 표현 방법을 수행하기 위한 컴퓨터-실행가능 명령어를 가진 컴퓨터-판독가능 매체로서,
    상기 수신된 조회를 형성하는 XML 조회 및 XML 뷰 중 하나 이상을 수신하는 단계;
    상기 수신 조회내의 모든 연산에 대해 노드 오브젝트를 정의하는 단계;
    상기 수신된 조회의 연산들을 명시적 부분들로 분해하는 연산자를 사용해 각각의 노드를 번역하는 단계; 및
    관계형 및 비관계형 데이터 소스들 중 하나 이상에 대한 후속 조회의 중간 언어 표현을 형성하는 상기 명시적 부분들에 대응되는 명령어를 생성하는 단계를 포함하는 컴퓨터-판독가능 매체.
  18. 제17항에 있어서,
    상기 연산자들은 특수 연산자, 데이터 소스, 리터랄, 부울 연산자, 시퀀스 연산자, 산술 연산자, 스트링 연산자, 값 비교 연산자, 노드 비교 연산자, 튜플 공간, 함수 정의 및 호출, XML 네비게이션, XML 구성, XML 속성 접근자, 타입 연산자, 언어 특정 연산자, 및 데이터 조작 연산자들 중 하나 이상을 구비하는 컴퓨터-판독가능 매체.
  19. 제17항에 있어서,
    상기 명시적 부분들은 다수의 XML 언어에 대해 공통인 컴퓨터-판독가능 매체.
  20. 제17항에 있어서,
    상기 수신 조회는 XML 조회 언어 및 XML 뷰 정의 언어 중 하나 이상을 구비하는 컴퓨터-판독가능 매체.
  21. 조회의 의미론적 표현을 생성하는 컴퓨터 시스템으로서,
    컴퓨터 명령어를 실행하는 프로세서; 및
    적어도 하나의 모듈을 구비하고,
    하나 이상의 소프트웨어 모듈 및 하나 이상의 하드웨어 모듈 중 하나 이상을 구비하는 상기 적어도 하나의 모듈은,
    조회를 형성하는 XML 조회 및 XML 뷰 중 하나 이상을 수신하는 입력 함수;
    상기 조회내의 모든 연산에 대해 노드 오브젝트를 정의하는 그래프 구조 생성기;
    각각의 노드 오브젝트에 대해, 상기 조회의 연산을 명시적 부분들로 분해하는 연산자를 할당하는 번역기 함수; 및
    상기 명시적 부분들을 상기 XML 조회 및 상기 XML 뷰의 의미를 표현하기 위한 중간 언어 표현으로서 제공하는 출력을 구비하는 컴퓨터 시스템.
  22. 제21항에 있어서,
    상기 연산자들은 특수 연산자, 데이터 소스, 리터랄, 부울 연산자, 시퀀스 연산자, 산술 연산자, 스트링 연산자, 값 비교 연산자, 노드 비교 연산자, 튜플 공간, 함수 정의 및 호출, XML 네비게이션, XML 구성, XML 속성 접근자, 타입 연산자, 언어 특정 연산자, 및 데이터 조작 연산자들 중 하나 이상을 구비하는 컴퓨터 시스템.
  23. 제21항에 있어서,
    상기 명시적 부분들은 다수의 XML 언어에 대해 공통인 컴퓨터 시스템.
KR1020040047194A 2003-06-23 2004-06-23 중간 언어 표현 방법 및 시스템 KR20050000348A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/601,444 2003-06-23
US10/601,444 US7519577B2 (en) 2003-06-23 2003-06-23 Query intermediate language method and system

Publications (1)

Publication Number Publication Date
KR20050000348A true KR20050000348A (ko) 2005-01-03

Family

ID=33418592

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020040047194A KR20050000348A (ko) 2003-06-23 2004-06-23 중간 언어 표현 방법 및 시스템

Country Status (5)

Country Link
US (1) US7519577B2 (ko)
EP (1) EP1492032A3 (ko)
JP (1) JP2005018776A (ko)
KR (1) KR20050000348A (ko)
CN (1) CN100527127C (ko)

Families Citing this family (213)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7366708B2 (en) 1999-02-18 2008-04-29 Oracle Corporation Mechanism to efficiently index structured data that provides hierarchical access in a relational database system
US7418435B1 (en) 1999-08-05 2008-08-26 Oracle International Corporation Multi-model access to data
US7421541B2 (en) * 2000-05-12 2008-09-02 Oracle International Corporation Version management of cached permissions metadata
US7873649B2 (en) * 2000-09-07 2011-01-18 Oracle International Corporation Method and mechanism for identifying transaction on a row of data
US7321900B1 (en) 2001-06-15 2008-01-22 Oracle International Corporation Reducing memory requirements needed to represent XML entities
US6996558B2 (en) * 2002-02-26 2006-02-07 International Business Machines Corporation Application portability and extensibility through database schema and query abstraction
US8244702B2 (en) 2002-02-26 2012-08-14 International Business Machines Corporation Modification of a data repository based on an abstract data representation
US7698642B1 (en) 2002-09-06 2010-04-13 Oracle International Corporation Method and apparatus for generating prompts
US7007017B2 (en) * 2003-02-10 2006-02-28 Xerox Corporation Method for automatic discovery of query language features of web sites
US6836778B2 (en) * 2003-05-01 2004-12-28 Oracle International Corporation Techniques for changing XML content in a relational database
US7386568B2 (en) * 2003-05-01 2008-06-10 Oracle International Corporation Techniques for partial rewrite of XPath queries in a relational database
US7188090B2 (en) * 2003-06-30 2007-03-06 Microsoft Corporation Drill-through queries from data mining model content
US7395271B2 (en) * 2003-08-25 2008-07-01 Oracle International Corporation Mechanism to enable evolving XML schema
US8694510B2 (en) 2003-09-04 2014-04-08 Oracle International Corporation Indexing XML documents efficiently
US8229932B2 (en) 2003-09-04 2012-07-24 Oracle International Corporation Storing XML documents efficiently in an RDBMS
US7207002B2 (en) * 2003-11-13 2007-04-17 International Business Machines Corporation Serialization and preservation of objects
US7165063B2 (en) * 2003-11-19 2007-01-16 International Business Machines Corporation Context quantifier transformation in XML query rewrite
US7900133B2 (en) 2003-12-09 2011-03-01 International Business Machines Corporation Annotation structure type determination
US8949220B2 (en) * 2003-12-19 2015-02-03 Oracle International Corporation Techniques for managing XML data associated with multiple execution units
US8775412B2 (en) * 2004-01-08 2014-07-08 International Business Machines Corporation Method and system for a self-healing query access plan
US7398265B2 (en) * 2004-04-09 2008-07-08 Oracle International Corporation Efficient query processing of XML data using XML index
US7440954B2 (en) 2004-04-09 2008-10-21 Oracle International Corporation Index maintenance for operations involving indexed XML data
US7499915B2 (en) * 2004-04-09 2009-03-03 Oracle International Corporation Index for accessing XML data
US7366735B2 (en) * 2004-04-09 2008-04-29 Oracle International Corporation Efficient extraction of XML content stored in a LOB
US7603347B2 (en) * 2004-04-09 2009-10-13 Oracle International Corporation Mechanism for efficiently evaluating operator trees
US7493305B2 (en) * 2004-04-09 2009-02-17 Oracle International Corporation Efficient queribility and manageability of an XML index with path subsetting
US7930277B2 (en) 2004-04-21 2011-04-19 Oracle International Corporation Cost-based optimizer for an XML data repository within a database
US20050283471A1 (en) * 2004-06-22 2005-12-22 Oracle International Corporation Multi-tier query processing
US7702627B2 (en) 2004-06-22 2010-04-20 Oracle International Corporation Efficient interaction among cost-based transformations
AU2005265030B2 (en) * 2004-06-23 2010-05-13 Oracle International Corporation Efficient evaluation of queries using translation
US20050289175A1 (en) * 2004-06-23 2005-12-29 Oracle International Corporation Providing XML node identity based operations in a value based SQL system
WO2006009768A1 (en) * 2004-06-23 2006-01-26 Oracle International Corporation Efficient evaluation of queries using translation
US7516121B2 (en) * 2004-06-23 2009-04-07 Oracle International Corporation Efficient evaluation of queries using translation
US7885980B2 (en) * 2004-07-02 2011-02-08 Oracle International Corporation Mechanism for improving performance on XML over XML data using path subsetting
US8566300B2 (en) * 2004-07-02 2013-10-22 Oracle International Corporation Mechanism for efficient maintenance of XML index structures in a database system
US7302447B2 (en) * 2005-01-14 2007-11-27 International Business Machines Corporation Virtual columns
US7668806B2 (en) * 2004-08-05 2010-02-23 Oracle International Corporation Processing queries against one or more markup language sources
US7685137B2 (en) * 2004-08-06 2010-03-23 Oracle International Corporation Technique of using XMLType tree as the type infrastructure for XML
US7814042B2 (en) 2004-08-17 2010-10-12 Oracle International Corporation Selecting candidate queries
US8694532B2 (en) * 2004-09-17 2014-04-08 First American Data Co., Llc Method and system for query transformation for managing information from multiple datasets
US9171100B2 (en) 2004-09-22 2015-10-27 Primo M. Pettovello MTree an XPath multi-axis structure threaded index
US8447774B1 (en) 2004-11-23 2013-05-21 Progress Software Corporation Database-independent mechanism for retrieving relational data as XML
US20060116999A1 (en) * 2004-11-30 2006-06-01 International Business Machines Corporation Sequential stepwise query condition building
US7461052B2 (en) * 2004-12-06 2008-12-02 International Business Machines Corporation Abstract query plan
US7921076B2 (en) 2004-12-15 2011-04-05 Oracle International Corporation Performing an action in response to a file system event
US8131766B2 (en) 2004-12-15 2012-03-06 Oracle International Corporation Comprehensive framework to integrate business logic into a repository
US7333981B2 (en) * 2004-12-17 2008-02-19 International Business Machines Corporation Transformation of a physical query into an abstract query
US8131744B2 (en) * 2004-12-17 2012-03-06 International Business Machines Corporation Well organized query result sets
US8112459B2 (en) * 2004-12-17 2012-02-07 International Business Machines Corporation Creating a logical table from multiple differently formatted physical tables having different access methods
US8122012B2 (en) 2005-01-14 2012-02-21 International Business Machines Corporation Abstract record timeline rendering/display
US7321895B2 (en) * 2005-01-14 2008-01-22 International Business Machines Corporation Timeline condition support for an abstract database
US7624097B2 (en) * 2005-01-14 2009-11-24 International Business Machines Corporation Abstract records
US7523131B2 (en) * 2005-02-10 2009-04-21 Oracle International Corporation Techniques for efficiently storing and querying in a relational database, XML documents conforming to schemas that contain cyclic constructs
US8095553B2 (en) 2005-03-17 2012-01-10 International Business Machines Corporation Sequence support operators for an abstract database
US8346737B2 (en) * 2005-03-21 2013-01-01 Oracle International Corporation Encoding of hierarchically organized data for efficient storage and processing
US8463801B2 (en) * 2005-04-04 2013-06-11 Oracle International Corporation Effectively and efficiently supporting XML sequence type and XQuery sequence natively in a SQL system
US7305414B2 (en) * 2005-04-05 2007-12-04 Oracle International Corporation Techniques for efficient integration of text searching with queries over XML data
US20060235839A1 (en) * 2005-04-19 2006-10-19 Muralidhar Krishnaprasad Using XML as a common parser architecture to separate parser from compiler
US7685150B2 (en) * 2005-04-19 2010-03-23 Oracle International Corporation Optimization of queries over XML views that are based on union all operators
US7949941B2 (en) * 2005-04-22 2011-05-24 Oracle International Corporation Optimizing XSLT based on input XML document structure description and translating XSLT into equivalent XQuery expressions
US8166059B2 (en) 2005-07-08 2012-04-24 Oracle International Corporation Optimization of queries on a repository based on constraints on how the data is stored in the repository
US8762410B2 (en) * 2005-07-18 2014-06-24 Oracle International Corporation Document level indexes for efficient processing in multiple tiers of a computer system
US7406478B2 (en) 2005-08-11 2008-07-29 Oracle International Corporation Flexible handling of datetime XML datatype in a database system
US7814065B2 (en) 2005-08-16 2010-10-12 Oracle International Corporation Affinity-based recovery/failover in a cluster environment
US7814091B2 (en) * 2005-09-27 2010-10-12 Oracle International Corporation Multi-tiered query processing techniques for minus and intersect operators
US8972423B2 (en) * 2006-09-26 2015-03-03 Siemens Product Lifecycle Management Software Inc. Opaque mechanism for web service interoperability
US8024368B2 (en) * 2005-10-07 2011-09-20 Oracle International Corporation Generating XML instances from flat files
US8073841B2 (en) 2005-10-07 2011-12-06 Oracle International Corporation Optimizing correlated XML extracts
US9367642B2 (en) * 2005-10-07 2016-06-14 Oracle International Corporation Flexible storage of XML collections within an object-relational database
US8554789B2 (en) * 2005-10-07 2013-10-08 Oracle International Corporation Managing cyclic constructs of XML schema in a rdbms
US20070112827A1 (en) * 2005-11-10 2007-05-17 International Business Machines Corporation Abstract rule sets
US7444332B2 (en) 2005-11-10 2008-10-28 International Business Machines Corporation Strict validation of inference rule based on abstraction environment
US7440945B2 (en) 2005-11-10 2008-10-21 International Business Machines Corporation Dynamic discovery of abstract rule set required inputs
US7664742B2 (en) 2005-11-14 2010-02-16 Pettovello Primo M Index data structure for a peer-to-peer network
US8949455B2 (en) 2005-11-21 2015-02-03 Oracle International Corporation Path-caching mechanism to improve performance of path-related operations in a repository
US8370375B2 (en) * 2005-12-08 2013-02-05 International Business Machines Corporation Method for presenting database query result sets using polymorphic output formats
US7933928B2 (en) 2005-12-22 2011-04-26 Oracle International Corporation Method and mechanism for loading XML documents into memory
US7774355B2 (en) 2006-01-05 2010-08-10 International Business Machines Corporation Dynamic authorization based on focus data
US7730032B2 (en) 2006-01-12 2010-06-01 Oracle International Corporation Efficient queriability of version histories in a repository
US7987456B2 (en) * 2006-01-24 2011-07-26 Microsoft Corporation Qualitatively annotated code
US9229967B2 (en) 2006-02-22 2016-01-05 Oracle International Corporation Efficient processing of path related operations on data organized hierarchically in an RDBMS
US7945562B2 (en) * 2006-03-15 2011-05-17 Oracle International Corporation Join predicate push-down optimizations
US7644062B2 (en) * 2006-03-15 2010-01-05 Oracle International Corporation Join factorization of union/union all queries
US7809713B2 (en) * 2006-03-15 2010-10-05 Oracle International Corporation Efficient search space analysis for join factorization
US7869585B2 (en) * 2006-03-17 2011-01-11 Microsoft Corporation Declarations for transformations within service sequences
US7644066B2 (en) * 2006-03-31 2010-01-05 Oracle International Corporation Techniques of efficient XML meta-data query using XML table index
US7853573B2 (en) * 2006-05-03 2010-12-14 Oracle International Corporation Efficient replication of XML data in a relational database management system
US9460064B2 (en) * 2006-05-18 2016-10-04 Oracle International Corporation Efficient piece-wise updates of binary encoded XML data
US8510292B2 (en) * 2006-05-25 2013-08-13 Oracle International Coporation Isolation for applications working on shared XML data
US10318752B2 (en) * 2006-05-26 2019-06-11 Oracle International Corporation Techniques for efficient access control in a database system
US20080222121A1 (en) * 2006-06-02 2008-09-11 Wolfgang Wiessler System for Adaptively Querying a Data Storage Repository
US7730080B2 (en) * 2006-06-23 2010-06-01 Oracle International Corporation Techniques of rewriting descendant and wildcard XPath using one or more of SQL OR, UNION ALL, and XMLConcat() construct
US8086077B2 (en) * 2006-06-30 2011-12-27 Aperio Technologies, Inc. Method for storing and retrieving large images via DICOM
US20080016088A1 (en) * 2006-07-13 2008-01-17 Zhen Hua Liu Techniques of XML query optimization over dynamic heterogeneous XML containers
US7577642B2 (en) * 2006-07-13 2009-08-18 Oracle International Corporation Techniques of XML query optimization over static and dynamic heterogeneous XML containers
US20080033967A1 (en) * 2006-07-18 2008-02-07 Ravi Murthy Semantic aware processing of XML documents
US7801856B2 (en) * 2006-08-09 2010-09-21 Oracle International Corporation Using XML for flexible replication of complex types
US7739219B2 (en) * 2006-09-08 2010-06-15 Oracle International Corporation Techniques of optimizing queries using NULL expression analysis
US20080082514A1 (en) * 2006-09-29 2008-04-03 International Business Machines Corporation Method and apparatus for integrating relational and hierarchical data
US7689549B2 (en) * 2006-10-05 2010-03-30 Oracle International Corporation Flashback support for domain index queries
US7797310B2 (en) 2006-10-16 2010-09-14 Oracle International Corporation Technique to estimate the cost of streaming evaluation of XPaths
US7933935B2 (en) 2006-10-16 2011-04-26 Oracle International Corporation Efficient partitioning technique while managing large XML documents
US7739251B2 (en) 2006-10-20 2010-06-15 Oracle International Corporation Incremental maintenance of an XML index on binary XML data
US7627566B2 (en) * 2006-10-20 2009-12-01 Oracle International Corporation Encoding insignificant whitespace of XML data
US9436779B2 (en) * 2006-11-17 2016-09-06 Oracle International Corporation Techniques of efficient XML query using combination of XML table index and path/value index
US20080120283A1 (en) * 2006-11-17 2008-05-22 Oracle International Corporation Processing XML data stream(s) using continuous queries in a data stream management system
US7840590B2 (en) * 2006-12-18 2010-11-23 Oracle International Corporation Querying and fragment extraction within resources in a hierarchical repository
US20080147615A1 (en) * 2006-12-18 2008-06-19 Oracle International Corporation Xpath based evaluation for content stored in a hierarchical database repository using xmlindex
US7860899B2 (en) * 2007-03-26 2010-12-28 Oracle International Corporation Automatically determining a database representation for an abstract datatype
US7814117B2 (en) * 2007-04-05 2010-10-12 Oracle International Corporation Accessing data from asynchronously maintained index
US8214351B2 (en) * 2007-04-16 2012-07-03 International Business Machines Corporation Selecting rules engines for processing abstract rules based on functionality and cost
US8037039B2 (en) * 2007-04-20 2011-10-11 Microsoft Corporation Runtime class database operation
US8255883B2 (en) * 2007-04-20 2012-08-28 Microsoft Corporation Translating late bound LINQ expressions into database queries
US8140557B2 (en) 2007-05-15 2012-03-20 International Business Machines Corporation Ontological translation of abstract rules
US8868620B2 (en) * 2007-06-08 2014-10-21 International Business Machines Corporation Techniques for composing data queries
US7836098B2 (en) 2007-07-13 2010-11-16 Oracle International Corporation Accelerating value-based lookup of XML document in XQuery
US20090063654A1 (en) * 2007-08-28 2009-03-05 International Business Machines Corporation Apparatus, system, and method for xml based disconnected data access for multivalued/hierarchical databases
US8386500B2 (en) * 2007-08-28 2013-02-26 Rocket Software, Inc. Apparatus, system, and method for XML based disconnected data access for multivalued/hierarchical databases
US8291310B2 (en) * 2007-08-29 2012-10-16 Oracle International Corporation Delta-saving in XML-based documents
US8140547B2 (en) * 2007-10-02 2012-03-20 International Business Machines Corporation Systems, methods and computer products for a monitoring context generator
US7979420B2 (en) * 2007-10-16 2011-07-12 Oracle International Corporation Handling silent relations in a data stream management system
US8296316B2 (en) * 2007-10-17 2012-10-23 Oracle International Corporation Dynamically sharing a subtree of operators in a data stream management system operating on existing queries
US7996388B2 (en) * 2007-10-17 2011-08-09 Oracle International Corporation Adding new continuous queries to a data stream management system operating on existing queries
US8073826B2 (en) * 2007-10-18 2011-12-06 Oracle International Corporation Support for user defined functions in a data stream management system
US7991766B2 (en) 2007-10-20 2011-08-02 Oracle International Corporation Support for user defined aggregations in a data stream management system
US8521867B2 (en) * 2007-10-20 2013-08-27 Oracle International Corporation Support for incrementally processing user defined aggregations in a data stream management system
US8438152B2 (en) 2007-10-29 2013-05-07 Oracle International Corporation Techniques for bushy tree execution plans for snowstorm schema
JP5238219B2 (ja) 2007-10-29 2013-07-17 株式会社東芝 情報処理システム及びパイプライン処理制御方法
US7991768B2 (en) 2007-11-08 2011-08-02 Oracle International Corporation Global query normalization to improve XML index based rewrites for path subsetted index
US8180791B2 (en) * 2007-11-08 2012-05-15 Oracle International Corporation Combining streaming and navigation for evaluating XML queries
US8250062B2 (en) 2007-11-09 2012-08-21 Oracle International Corporation Optimized streaming evaluation of XML queries
US8543898B2 (en) 2007-11-09 2013-09-24 Oracle International Corporation Techniques for more efficient generation of XML events from XML data sources
US20090144229A1 (en) * 2007-11-30 2009-06-04 Microsoft Corporation Static query optimization for linq
US9842090B2 (en) 2007-12-05 2017-12-12 Oracle International Corporation Efficient streaming evaluation of XPaths on binary-encoded XML schema-based documents
US7870124B2 (en) * 2007-12-13 2011-01-11 Oracle International Corporation Rewriting node reference-based XQuery using SQL/SML
US7882120B2 (en) * 2008-01-14 2011-02-01 Microsoft Corporation Data description language for record based systems
US7996444B2 (en) * 2008-02-18 2011-08-09 International Business Machines Corporation Creation of pre-filters for more efficient X-path processing
US8606757B2 (en) * 2008-03-31 2013-12-10 Intel Corporation Storage and retrieval of concurrent query language execution results
WO2009127219A1 (en) * 2008-04-14 2009-10-22 Telecom Italia S.P.A. Distributed service framework
US8713015B2 (en) * 2008-04-23 2014-04-29 Microsoft Corporation Expressive grouping for language integrated queries
US8429196B2 (en) 2008-06-06 2013-04-23 Oracle International Corporation Fast extraction of scalar values from binary encoded XML
US8713048B2 (en) * 2008-06-24 2014-04-29 Microsoft Corporation Query processing with specialized query operators
US8375044B2 (en) * 2008-06-24 2013-02-12 Microsoft Corporation Query processing pipelines with single-item and multiple-item query operators
US8364750B2 (en) 2008-06-24 2013-01-29 Microsoft Corporation Automated translation of service invocations for batch processing
US8819046B2 (en) * 2008-06-24 2014-08-26 Microsoft Corporation Data query translating into mixed language data queries
US8364751B2 (en) 2008-06-25 2013-01-29 Microsoft Corporation Automated client/server operation partitioning
US8606806B2 (en) * 2008-07-25 2013-12-10 Microsoft Corporation Static typing of xquery expressions in lax validation content
US7958112B2 (en) 2008-08-08 2011-06-07 Oracle International Corporation Interleaving query transformations for XML indexes
US8676841B2 (en) 2008-08-29 2014-03-18 Oracle International Corporation Detection of recurring non-occurrences of events using pattern matching
US8239750B2 (en) * 2008-09-15 2012-08-07 Erik Thomsen Extracting semantics from data
US8805875B1 (en) * 2008-10-04 2014-08-12 Reflex Systems Llc Systems and methods for information retrieval
US8352517B2 (en) 2009-03-02 2013-01-08 Oracle International Corporation Infrastructure for spilling pages to a persistent store
US8145859B2 (en) 2009-03-02 2012-03-27 Oracle International Corporation Method and system for spilling from a queue to a persistent store
US8875111B2 (en) * 2009-04-23 2014-10-28 Microsoft Corporation Intermediate language representation and modification
US8676808B2 (en) 2009-07-09 2014-03-18 Dillon Software Services, Llc Data store interface that facilitates distribution of application functionality across a multi-tier client-server architecture
US8321450B2 (en) 2009-07-21 2012-11-27 Oracle International Corporation Standardized database connectivity support for an event processing server in an embedded context
US8387076B2 (en) 2009-07-21 2013-02-26 Oracle International Corporation Standardized database connectivity support for an event processing server
US8386466B2 (en) 2009-08-03 2013-02-26 Oracle International Corporation Log visualization tool for a data stream processing server
US8527458B2 (en) 2009-08-03 2013-09-03 Oracle International Corporation Logging framework for a data stream processing server
US9081873B1 (en) * 2009-10-05 2015-07-14 Stratacloud, Inc. Method and system for information retrieval in response to a query
US8631028B1 (en) 2009-10-29 2014-01-14 Primo M. Pettovello XPath query processing improvements
US9430494B2 (en) 2009-12-28 2016-08-30 Oracle International Corporation Spatial data cartridge for event processing systems
US8959106B2 (en) 2009-12-28 2015-02-17 Oracle International Corporation Class loading using java data cartridges
US9305057B2 (en) 2009-12-28 2016-04-05 Oracle International Corporation Extensible indexing framework using data cartridges
US8255372B2 (en) 2010-01-18 2012-08-28 Oracle International Corporation Efficient validation of binary XML data
US10162851B2 (en) * 2010-04-19 2018-12-25 Salesforce.Com, Inc. Methods and systems for performing cross store joins in a multi-tenant store
US8365156B2 (en) * 2010-04-17 2013-01-29 Microsoft Corporation Intermediate language support for change resilience
WO2011145044A1 (en) * 2010-05-17 2011-11-24 Green Sql Ltd Database translation system and method
US8713049B2 (en) 2010-09-17 2014-04-29 Oracle International Corporation Support for a parameterized query/view in complex event processing
US9189280B2 (en) 2010-11-18 2015-11-17 Oracle International Corporation Tracking large numbers of moving objects in an event processing system
US8990416B2 (en) 2011-05-06 2015-03-24 Oracle International Corporation Support for a new insert stream (ISTREAM) operation in complex event processing (CEP)
US9396284B2 (en) * 2011-05-18 2016-07-19 Oracle International Corporation Method and system for implementing efficient updatable relational views over XML data
US9177021B2 (en) 2011-06-09 2015-11-03 International Business Machines Corporation Relational query planning for non-relational data sources
JP2013003664A (ja) * 2011-06-13 2013-01-07 Sony Corp 情報処理装置および方法
US8713037B2 (en) * 2011-06-30 2014-04-29 Xerox Corporation Translation system adapted for query translation via a reranking framework
US9329975B2 (en) 2011-07-07 2016-05-03 Oracle International Corporation Continuous query language (CQL) debugger in complex event processing (CEP)
US10756759B2 (en) 2011-09-02 2020-08-25 Oracle International Corporation Column domain dictionary compression
CN103176967A (zh) * 2011-12-23 2013-06-26 英顺源(上海)科技有限公司 依据多个查询字词的翻译查询系统及其方法
JP5895545B2 (ja) * 2012-01-17 2016-03-30 富士通株式会社 プログラム、圧縮ファイル生成方法、圧縮符号伸張方法、情報処理装置、および記録媒体
US8543563B1 (en) 2012-05-24 2013-09-24 Xerox Corporation Domain adaptation for query translation
US9563663B2 (en) 2012-09-28 2017-02-07 Oracle International Corporation Fast path evaluation of Boolean predicates
US8812523B2 (en) 2012-09-28 2014-08-19 Oracle International Corporation Predicate result cache
US11288277B2 (en) 2012-09-28 2022-03-29 Oracle International Corporation Operator sharing for continuous queries over archived relations
US10042907B2 (en) * 2012-11-29 2018-08-07 Teradata Us, Inc. Providing metadata to database systems and environments with multiple processing units or modules
US10956422B2 (en) 2012-12-05 2021-03-23 Oracle International Corporation Integrating event processing with map-reduce
US10298444B2 (en) 2013-01-15 2019-05-21 Oracle International Corporation Variable duration windows on continuous data streams
US9098587B2 (en) 2013-01-15 2015-08-04 Oracle International Corporation Variable duration non-event pattern matching
WO2014122295A2 (en) * 2013-02-07 2014-08-14 Qatar Foundation Methods and systems for data cleaning
US9390135B2 (en) 2013-02-19 2016-07-12 Oracle International Corporation Executing continuous event processing (CEP) queries in parallel
US9047249B2 (en) 2013-02-19 2015-06-02 Oracle International Corporation Handling faults in a continuous event processing (CEP) system
US9418113B2 (en) 2013-05-30 2016-08-16 Oracle International Corporation Value based windows on relations in continuous data streams
US9934279B2 (en) 2013-12-05 2018-04-03 Oracle International Corporation Pattern matching across multiple input data streams
US9870390B2 (en) 2014-02-18 2018-01-16 Oracle International Corporation Selecting from OR-expansion states of a query
US10073873B2 (en) * 2014-03-21 2018-09-11 Futurewei Technologies, Inc. System and method for column-specific materialization scheduling
US9244978B2 (en) 2014-06-11 2016-01-26 Oracle International Corporation Custom partitioning of a data stream
US9712645B2 (en) 2014-06-26 2017-07-18 Oracle International Corporation Embedded event processing
US20160048504A1 (en) * 2014-08-14 2016-02-18 Avaz, Inc. Conversion of interlingua into any natural language
US9886486B2 (en) 2014-09-24 2018-02-06 Oracle International Corporation Enriching events with dynamically typed big data for event processing
US10120907B2 (en) 2014-09-24 2018-11-06 Oracle International Corporation Scaling event processing using distributed flows and map-reduce operations
US10320633B1 (en) 2014-11-20 2019-06-11 BloomReach Inc. Insights for web service providers
US10585887B2 (en) 2015-03-30 2020-03-10 Oracle International Corporation Multi-system query execution plan
US20170024432A1 (en) * 2015-07-24 2017-01-26 International Business Machines Corporation Generating sql queries from declarative queries for semi-structured data
WO2017018901A1 (en) 2015-07-24 2017-02-02 Oracle International Corporation Visually exploring and analyzing event streams
US10031940B2 (en) * 2015-09-24 2018-07-24 Futurewei Technologies, Inc. System and method for database query
US10339137B2 (en) * 2015-12-07 2019-07-02 Futurewei Technologies, Inc. System and method for caching and parameterizing IR
WO2017135837A1 (en) 2016-02-01 2017-08-10 Oracle International Corporation Pattern based automated test data generation
WO2017135838A1 (en) 2016-02-01 2017-08-10 Oracle International Corporation Level of detail control for geostreaming
US10474653B2 (en) 2016-09-30 2019-11-12 Oracle International Corporation Flexible in-memory column store placement
US10445422B2 (en) * 2018-02-09 2019-10-15 Microsoft Technology Licensing, Llc Identification of sets and manipulation of set data in productivity applications
JP6517414B1 (ja) * 2018-08-24 2019-05-22 グレイステクノロジー株式会社 ドキュメント作成支援システム
CN110164216B (zh) * 2019-05-23 2021-04-23 福建工程学院 一种sql在线评测系统
US12001781B2 (en) 2020-09-23 2024-06-04 Evernorth Strategic Development, Inc. Query selection system
US11586624B2 (en) 2020-09-28 2023-02-21 Databricks, Inc. Integrated native vectorized engine for computation

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
IL100987A (en) 1991-02-27 1995-10-31 Digital Equipment Corp Method and device for encoding
US5960200A (en) 1996-05-03 1999-09-28 I-Cube System to transition an enterprise to a distributed infrastructure
US6601058B2 (en) * 1998-10-05 2003-07-29 Michael Forster Data exploration system and method
US7124144B2 (en) * 2000-03-02 2006-10-17 Actuate Corporation Method and apparatus for storing semi-structured data in a structured manner
US6934712B2 (en) * 2000-03-21 2005-08-23 International Business Machines Corporation Tagging XML query results over relational DBMSs
US6947945B1 (en) * 2000-03-21 2005-09-20 International Business Machines Corporation Using an XML query language to publish relational data as XML
US6654734B1 (en) * 2000-08-30 2003-11-25 International Business Machines Corporation System and method for query processing and optimization for XML repositories
WO2002035395A2 (en) 2000-10-27 2002-05-02 Entigen Corporation Integrating heterogeneous data and tools
US7203678B1 (en) * 2001-03-27 2007-04-10 Bea Systems, Inc. Reconfigurable query generation system for web browsers
US6799184B2 (en) * 2001-06-21 2004-09-28 Sybase, Inc. Relational database system providing XML query support
US6725212B2 (en) * 2001-08-31 2004-04-20 International Business Machines Corporation Platform-independent method and system for graphically presenting the evaluation of a query in a database management system
US6901410B2 (en) * 2001-09-10 2005-05-31 Marron Pedro Jose LDAP-based distributed cache technology for XML
US7120645B2 (en) * 2002-09-27 2006-10-10 Oracle International Corporation Techniques for rewriting XML queries directed to relational database constructs
US7146352B2 (en) * 2003-06-23 2006-12-05 Microsoft Corporation Query optimizer system and method

Also Published As

Publication number Publication date
CN100527127C (zh) 2009-08-12
CN1609856A (zh) 2005-04-27
US7519577B2 (en) 2009-04-14
US20040267760A1 (en) 2004-12-30
EP1492032A3 (en) 2005-03-30
JP2005018776A (ja) 2005-01-20
EP1492032A2 (en) 2004-12-29

Similar Documents

Publication Publication Date Title
KR20050000348A (ko) 중간 언어 표현 방법 및 시스템
US7383255B2 (en) Common query runtime system and application programming interface
Fernandez et al. An algebra for XML query
Braga et al. XQBE (XQ uery B y E xample) A visual interface to the standard XML query language
Boag et al. XQuery 1.0: An XML query language
Benzaken et al. CDuce: an XML-centric general-purpose language
US7146352B2 (en) Query optimizer system and method
World Wide Web Consortium Xml path language (xpath) 2.0
Florescu et al. The BEA/XQRL streaming XQuery processor
US7665073B2 (en) Compile time meta-object protocol systems and methods
US8296744B2 (en) Tree-based directed graph programming structures for a declarative programming language
Fernandez et al. A semi-monad for semi-structured data (ICDT version)
EP1686495A1 (en) Mapping web services to ontologies
US20040194057A1 (en) System and method for constructing and validating object oriented XML expressions
US20040193575A1 (en) Path expressions and SQL select statement in object oriented language
JP2012504826A (ja) 拡張可能な構文を有するプログラミング言語
Wielemaker et al. ClioPatria: a SWI-Prolog infrastructure for the Semantic Web
Euzenat et al. Expressive alignment language and implementation
Fernandez et al. Growing xquery
Henglein et al. Generic multiset programming with discrimination-based joins and symbolic cartesian products
Odersky et al. Programming in Scala
KR20040056298A (ko) 엑스퀘리를 사용하여 통합 스키마를 정의하는 데이터 통합시스템 및 그 방법
Zhang Efficient XML stream processing and searching
Bach et al. Tom manual
Schmidt Design and Implementation of a validating XML parser in Haskell

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid