맨위로가기

XQuery

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

XQuery는 XML 데이터를 쿼리하고 조작하기 위한 함수형 프로그래밍 언어이다. XML 문서나 XML로 간주될 수 있는 데이터 소스에서 데이터를 추출하고 새로운 XML 문서를 생성하는 데 사용되며, XPath의 상위 집합과 SQL과 유사한 FLWOR 식을 포함한다. XQuery는 XQuery 및 XPath 데이터 모델(XDM)을 기반으로 하며, XML 문서의 일곱 가지 유형의 노드를 처리한다. XQuery는 XSLT와 유사한 기능을 제공하지만, 데이터베이스 쿼리 언어의 전통을 따르며, XSLT보다 데이터 처리에 강점을 보인다. XQuery 3.0은 완전한 함수형 프로그래밍을 지원하며, XQuery 3.1은 JSON에 대한 지원을 추가했다. XQuery는 다양한 분야에서 활용되며, BaseX, eXist, MarkLogic, Saxon 등 여러 구현체가 존재한다.

광고

더 읽어볼만한 페이지

  • 4세대 프로그래밍 언어 - SAS (소프트웨어)
    SAS는 통계 분석, 데이터 마이닝, 예측 모델링 기능을 제공하는 소프트웨어 제품군으로, 농업 데이터 분석을 위해 개발되어 다양한 산업 분야에서 활용되고 있으며 인공지능 및 머신러닝 분야로 투자를 확대하고 있다.
  • 4세대 프로그래밍 언어 - 비주얼 폭스프로
    비주얼 폭스프로는 xBase 언어군에 속하는 절차적 프로그래밍 언어이자 데이터베이스 관리 시스템으로, dBase를 기반으로 관계형 데이터베이스 엔진과 통합되어 SQL 쿼리 및 데이터 조작을 지원하며, 마이크로소프트 개발 중단 후 커뮤니티 주도의 개발이 진행되었다.
  • 질의 언어 - 임베디드 SQL
    임베디드 SQL은 호스트 프로그래밍 언어 내에 SQL 문을 삽입하여 데이터베이스와 상호 작용하는 기술로, 데이터베이스 액세스를 표준화하지만 보안 취약점과 이식성 저하의 단점도 가진다.
  • 질의 언어 - SQL
    SQL은 관계형 데이터베이스 관리 시스템에서 데이터를 관리하고 조작하기 위해 설계된 표준 프로그래밍 언어로서, 데이터 정의어, 데이터 조작어, 데이터 제어어를 포함하는 다양한 명령어 문법을 제공하며 ANSI와 ISO에 의해 표준으로 채택되었다.
  • 함수형 프로그래밍 언어 - 코틀린 (프로그래밍 언어)
    코틀린은 젯브레인즈에서 개발한 정적 타입 언어로, 자바 가상 머신에서 동작하며 자바와의 호환성을 갖고, 안드로이드 공식 지원 언어로 채택되어 다양한 분야에서 활용되고 있으며, 이름은 러시아의 코틀린 섬에서 유래되었다.
  • 함수형 프로그래밍 언어 - 하스켈
    하스켈은 해스켈 커리의 이름을 딴 순수 함수형 프로그래밍 언어로, 여러 함수형 언어 통합 노력의 결과로 탄생하여 느긋한 계산법, 패턴 매칭, 타입 클래스, 모나드 등의 특징을 가지며 GHC가 표준 구현체로 사용된다.

2. 특징

XQuery는 기능적이고, 부작용이 없는, 식 지향 프로그래밍 언어이며, 간단한 타입 시스템을 가지고 있다.[8] 모든 XQuery 식은 시퀀스에서 작동하며 시퀀스로 평가된다. 시퀀스는 항목의 정렬된 목록이며, 항목은 XML 문서의 구성 요소를 나타내는 노드이거나, `xs:integer` 또는 `xs:string`과 같은 XML 스키마 기본 타입의 인스턴스인 원자 값일 수 있다.

XQuery는 XML 문서 또는 XML로 볼 수 있는 모든 데이터 소스(예: 관계형 데이터베이스[9], 오피스 문서)에서 데이터를 추출하고 조작하는 수단을 제공한다. XML 문서의 특정 부분을 주소 지정하기 위한 XPath 식 구문의 상위 집합을 포함하며, 조인(join)을 수행하기 위한 SQL과 유사한 "FLWOR 식"으로 보완된다. FLWOR 식은 FOR, LET, WHERE, ORDER BY, RETURN의 다섯 개의 절로 구성된다.

새로운 XML 문서를 구성할 수 있는 구문을 제공한다. 요소 및 속성 이름이 미리 알려진 경우 XML과 유사한 구문을 사용할 수 있으며, 그렇지 않은 경우에는 동적 노드 생성자라고 하는 식을 사용할 수 있다.

XQuery는 XQuery 및 XPath 데이터 모델 (XDM)을 기반으로 하며, 문서 노드, 요소, 속성, 텍스트 노드, 주석, 처리 지시 및 네임스페이스의 일곱 가지 종류의 노드를 포함한다. XDM은 모든 값을 시퀀스로 모델링하며, 시퀀스의 항목은 XML 노드 또는 원자 값일 수 있다. 원자 값은 정수, 문자열, 부울 등이 될수 있으며, 전체 유형 목록은 XML 스키마에 정의된 기본 유형을 기반으로 한다.

XML 문서 또는 데이터베이스를 업데이트하는 기능과 전체 텍스트 검색 기능은 핵심 언어의 일부가 아니지만, 추가 기능 확장 표준에서 정의된다. XQuery Update Facility 1.0은 업데이트 기능을 지원하고 XQuery 및 XPath Full Text 1.0은 XML 문서에서 전체 텍스트 검색을 지원한다.

XQuery 3.0은 함수가 조작될 수 있는 값(변수에 저장, 고차 함수에 전달 및 동적으로 호출)이라는 점에서 완전한 기능적 프로그래밍에 대한 지원을 추가한다.

3. 문법 및 예제

XQuery에서 계산을 수행하기 위한 모든 구조는 표현식이다. 구문과 같은 동작을 하는 것처럼 보이는 일부 키워드가 있지만, 실제로는 표현식으로 처리된다. 함수를 실행하려면 본문 내의 표현식이 평가되고 해당 값이 반환된다.

다음은 셰익스피어의 연극 햄릿의 각 막에 등장하는 고유한 화자를 나열하는 XQuery 샘플 코드이다. 이 연극은 [http://www.ibiblio.org/xml/examples/shakespeare/hamlet.xml hamlet.xml]에 인코딩되어 있다.

```xquery



{

for $act in doc("hamlet.xml")//ACT

let $speakers := distinct-values($act//SPEAKER)

return



{ string($act/TITLE) }



    {

    for $speaker in $speakers

    return
  • { $speaker }


  • }





}



```

'Hello World'를 출력하는 전체 쿼리는 다음과 같이 작성할 수 있다.

```xquery

"Hello World"

```

이러한 스타일은 함수형 프로그래밍 언어에서 흔히 사용된다.

4. 활용 분야

XQuery는 다양한 분야에서 활용될 수 있다. 웹 서비스에서 사용할 정보를 데이터베이스에서 추출하거나, XML 데이터베이스에 저장된 데이터에 대한 요약 보고서를 생성하는 데 사용될 수 있다. 또한 웹에서 텍스트 문서를 검색하여 관련 정보를 찾아 결과를 컴파일하고, 웹에 게시할 XML 데이터를 선택하고 XHTML로 변환하는 데에도 활용된다. 애플리케이션 통합에 사용할 데이터를 데이터베이스에서 가져오거나, 여러 트랜잭션을 나타내는 XML 문서를 여러 XML 문서로 분할하는 작업에도 XQuery가 사용될 수 있다.

5. XQuery와 XSLT 비교

XQuery는 처음에는 대규모 XML 문서 모음을 위한 쿼리 언어로 구상되었지만, 개별 문서도 변환할 수 있다. 따라서 XQuery의 기능은 입력 XML 문서를 HTML 또는 다른 형식으로 변환하도록 특별히 설계된 XSLT와 겹치는 부분이 있다.

XSLT 2.0 및 XQuery 표준은 W3C 내의 별도 작업 그룹에서 개발되었으며, 적절한 경우 공통적인 접근 방식을 보장하기 위해 협력했다. 이들은 동일한 데이터 모델(XDM), 타입 시스템 및 함수 라이브러리를 공유하며, 둘 다 XPath 2.0을 하위 언어로 포함한다.

두 언어는 서로 다른 전통에 기반을 두고 있으며, 서로 다른 커뮤니티의 요구를 충족한다. XSLT는 주로 화면, ( 웹 템플릿 언어) 또는 종이에 XML을 사람의 가독성을 위해 렌더링하는 것을 주요 목표로 하는 스타일시트 언어로 구상되었다. XQuery는 주로 SQL의 전통을 따르는 데이터베이스 쿼리 언어로 구상되었다.

두 언어가 서로 다른 커뮤니티에서 시작되었기 때문에, XSLT는 구조가 더 유연한 내러티브 문서를 처리하는 데 더 강점을 보인다. 반면 XQuery는 (예: 관계형 조인을 수행할 때) 데이터 처리에 더 강점을 보인다.

XSLT는 현재 문서에 작은 변경 사항을 가하는 애플리케이션에 XQuery보다 강력하다.[15] XQuery 1.0에는 동적 바인딩이나 다형성을 위한 메커니즘이 없었지만, XQuery 3.0에서 함수를 일급 값으로 도입하여 이 문제가 해결되었다.

5. 1. 버전

XSLT 1.0은 1999년에 권고안으로 등장했으며, XQuery 1.0은 2007년 초에 권고안으로 채택되었다.[10][11][12] XSLT 2.0에는 그룹화, 숫자 및 날짜 서식 지정, XML 네임스페이스에 대한 더 큰 제어 등 XQuery 1.0에 없는 많은 기능이 있다.[10][11][12] 이러한 기능 중 다수는 XQuery 3.0에 포함되었다.[13] XSLT 2.0은 강력한 타이핑과 스키마 인식을 향해 나아가면서 XQuery의 영향을 크게 받았다.

5. 2. 장단점

XQuery는 SQL과 같은 데이터베이스 언어 사용 경험이 있는 사용자에게 XSLT보다 배우기 쉽다는 연구 결과가 있다.[14] XQuery는 배우는 개념이 적고 프로그램이 간결하며, 어떤 표현식이든 구문적 맥락에서 사용할 수 있어 직교적이기 때문이다. 반면, XSLT는 XPath 표현식을 XSLT 명령어 안에 중첩할 수 있지만 그 반대는 불가능하다.[14]

XSLT는 현재 문서에 작은 변경 사항을 가하는 애플리케이션에서 XQuery보다 강력하다.[15] XQuery 1.0에는 동적 바인딩이나 다형성을 위한 메커니즘이 없었지만, XQuery 3.0에서 함수를 일급 값으로 도입하여 이 문제가 해결되었다. XSLT는 템플릿 규칙의 동적 일치와 `xsl:import`를 사용한 규칙 재정의 기능을 제공하여 여러 사용자 정의 레이어가 있는 애플리케이션 작성을 지원한다. XQuery 1.0에서 이러한 기능이 없었던 것은 정적 분석에 적합하게 하고 컴파일 시간에 코드 오류를 감지하기 쉽게 하기 위한 설계 결정이었다.

XSLT 2.0은 XML 구문을 사용하므로 XQuery 1.0에 비해 장황하지만, 많은 대규모 애플리케이션은 XSLT를 사용하여 처리 파이프라인의 일부로 스타일시트를 동적으로 읽고, 쓰고, 수정하여 이러한 기능을 활용한다.[16][17] XML 구문을 사용하면 XML 기반 도구를 사용하여 XSLT 코드를 관리할 수도 있다. 반대로 XQuery 구문은 Java(자바용 XQuery API) 또는 C#과 같은 전통적인 프로그래밍 언어에 포함하는 데 더 적합하다.[16][17] 필요하다면 XQuery 코드는 XQueryX라고 하는 XML 구문으로 표현할 수도 있다.[16][17]

6. 확장 및 향후 작업

6. 1. W3C 확장

W3C는 XQuery의 두 가지 주요 확장을 개발했다.[18]

  • XQuery 1.0 및 XPath 2.0 Full-Text
  • XQuery 업데이트 기능


두 확장 모두 XQuery 1.0의 확장으로 권고안 상태에 도달했지만, 자원 부족으로 XQuery 3.0과 함께 사용하기 위한 작업은 중단되었다.

XQuery 3.0은 2014년 4월 8일에 권고안으로 발표되었으며,[19] XQuery 3.1은 2017년 2월에 권고안으로 발표되었다.

XQuery에 대한 스크립팅(절차적) 확장이 설계되었지만 완료되지 않았다.[20][21]

EXPath 커뮤니티 그룹[22]은 XQuery 및 기타 관련 표준(XPath, XSLT, XProc, XForms)에 대한 확장을 개발한다.

6. 2. 서드파티 확장

JSONiq는 JSON 문서에서 데이터를 추출하고 변환하는 기능을 추가한 XQuery의 확장이다. JSONiq는 XQuery 3.0의 상위 집합이며, 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스에 따라 공개되었다.[27]

XQuery 3.1은 JSON에 대한 완벽한 지원을 추가했기 때문에 사실상 JSONiq를 폐지했다.[27]

EXQuery 프로젝트는 이식 가능한 XQuery 애플리케이션을 생성하는 표준을 개발한다.[27] 현재 RESTXQ등의 표준을 사용할 수 있다.[28]

7. 구현체

wikitext

XQuery 구현체로는 BaseX(BSD 라이선스, Java), eXist(LGPL, Java), MarkLogic(독점, C++), Saxon HE (Mozilla Public License, Java), Saxon EE (독점, Java), Xidel(GPLv3+, FreePascal), Zorba(아파치 라이선스, C++) 등이 있다.

인기 있는 XQuery 구현 개요
이름라이선스언어XQuery 3.1XQuery 3.0XQuery 1.0XQuery 업데이트 1.0XQuery 전체 텍스트 1.0
BaseXBSD 라이선스Java
eXistLGPLJava부분부분아니요아니요
MarkLogic독점C++아니요부분아니요아니요
Saxon HEMozilla Public LicenseJava부분부분아니요
Saxon EE독점Java아니요
XidelGPLv3+FreePascal아니요아니요
Zorba아파치 라이선스C++아니요


8. XPath 1.0과 XQuery 1.0 (XPath 2.0)

XQuery 1.0은 XPath 2.0의 확장이다. XPath 2.0과 XQuery 1.0에서 모두 구문적으로 올바르고 정상적으로 실행되는 식은, 어느 언어에서도 같은 결과를 반환한다.

XPath 1.0에서는 쿼리 결과가 중복 없는 노드 집합으로 정의되지만, XPath 2.0에서의 쿼리 결과는 순서를 가지며 값의 중복을 허용하는 시퀀스이다.

XPath 2.0에는 XPath 1.0에 대한 하위 호환성 모드가 옵션으로 존재하며, 이 옵션을 이용할 수 있는 환경에서는 XPath 2.0에서도 XPath 1.0과 같은 결과를 얻을 수 있다.

참조

[1] 웹사이트 XQuery 3.1 Recommendation http://www.w3.org/TR[...] 2017-03-21
[2] 웹사이트 XQuery 3.1: An XML Query Language https://www.w3.org/T[...] 2017-03-21
[3] 웹사이트 XQuery and Static Typing https://technet.micr[...] 2023-04-03
[4] 웹사이트 XML and Semantic Web W3C Standards Timeline http://www.dblab.ntu[...] 2012-02-04
[5] 웹사이트 XQuery 3.0 Recommendation http://www.w3.org/TR[...] 2014-04-08
[6] 웹사이트 XQuery 3.1 Recommendation http://www.w3.org/TR[...] 2017-03-21
[7] 웹사이트 cited by J.Robie http://lists.w3.org/[...] 2003-10-25
[8] 논문 Using XQuery for problem solving http://www.cs.uef.fi[...]
[9] 웹사이트 Data retrieval with XQuery http://www-01.ibm.co[...] 2016-01-18
[10] 웹사이트 Comparing XSLT and XQuery https://www.mscs.mu.[...] 2005-05
[11] 웹사이트 Comparing XSLT and XQuery http://www.xml.com/p[...] 2005-03-09
[12] 웹사이트 XQuery, XSLT "overlap" debated http://www.xmlhack.c[...] 2001-02-23
[13] 웹사이트 XQuery 3.0 requirements http://www.w3.org/TR[...]
[14] 서적 Usability of XML Query Languages
[15] 웹사이트 XQuery Update Facility http://www.w3.org/TR[...]
[16] 웹사이트 XML Syntax for XQuery (XQueryX) http://www.w3.org/TR[...]
[17] 웹사이트 Saxon diaries: How not to fold constants http://saxonica.blog[...]
[18] 웹사이트 XQuery and XPath Full Text 1.0 http://www.w3.org/TR[...]
[19] 웹사이트 XML Query (XQuery) 3.0 http://www.w3.org/TR[...]
[20] 웹사이트 XQuery Scripting Extension 1.0 Requirements http://www.w3.org/TR[...]
[21] 웹사이트 XQuery 1.0 Scripting Extension https://www.w3.org/T[...]
[22] 웹사이트 EXPath Community Group http://www.w3.org/co[...]
[23] 웹사이트 Packaging System http://expath.org/sp[...]
[24] 웹사이트 File Module http://expath.org/sp[...]
[25] 웹사이트 Binary Module http://expath.org/sp[...]
[26] 웹사이트 Web Applications http://expath.org/sp[...]
[27] 웹사이트 Standard for portable XQuery applications http://www.exquery.o[...] 2013-12-12
[28] 웹사이트 RESTXQ 1.0: RESTful Annotations for XQuery https://exquery.gith[...]
[29] 웹인용 XQuery 3.1 Recommendation http://www.w3.org/TR[...] 2017-03-21
[30] 웹인용 XQuery 3.1: An XML Query Language https://www.w3.org/T[...] 2017-03-21
[31] 웹인용 XQuery and Static Typing https://technet.micr[...]
[32] 웹인용 XML and Semantic Web W3C Standards Timeline https://web.archive.[...] 2012-02-04
[33] 웹인용 XQuery 3.0 Recommendation http://www.w3.org/TR[...] 2014-04-08
[34] 웹인용 XQuery 3.1 Recommendation http://www.w3.org/TR[...] 2017-03-21



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com