XQuery
XQuery이 문서에는 여러 가지 문제가 있습니다.개선을 돕거나 토크 페이지에서 이러한 문제에 대해 논의해 주십시오.(이러한 템플릿메시지를 삭제하는 방법과 타이밍에 대해 설명합니다)
|
| 패러다임 | 선언형, 기능형, 모듈형 |
|---|---|
| 설계자 | W3C |
| 처음 등장한 | 2007 |
| 안정된 릴리스 | |
| 타이핑 분야 | 동적 또는 정적,[2][3] 강력 |
| OS | 크로스 플랫폼 |
| 파일 이름 확장자 | .xq, .xql, .xqm, .xqy, .xquery |
| 웹 사이트 | www |
| 주요 구현 | |
| 많이 | |
| 영향을 받다 | |
| XPath, SQL, XSLT | |
| |
XQuery(XML 쿼리)는 구조화 및 비구조화 데이터(보통 XML, 텍스트 형식 및 기타 데이터 형식(JSON, 바이너리 등)에 대한 벤더 고유 확장자)의 컬렉션을 쿼리 및 변환하는 쿼리 및 기능 프로그래밍 언어입니다.이 언어는 W3C의 XML Query 작업 그룹에 의해 개발됩니다.이 작업은 XSL Working Group에 의한 XSLT 개발과 밀접하게 연계되어 있으며, 두 그룹은 XQuery의 서브셋인 XPath에 대한 책임을 공유하고 있다.
XQuery 1.0은 2007년 [4]1월 23일에 W3C 권장사항이 되었습니다.
XQuery 3.0은 2014년 [5]4월 8일에 W3C 권장 사항이 되었습니다.
XQuery 3.1은 2017년 [6]3월 21일에 W3C 권장 사항이 되었습니다.
XML Query 프로젝트의 임무는 World Wide Web 상의 실제 문서와 가상 문서에서 데이터를 추출하는 유연한 쿼리 기능을 제공함으로써 최종적으로 웹 세계와 데이터베이스 세계 간에 필요한 상호작용을 제공하는 것입니다.최종적으로 XML 파일 모음은 [7]데이터베이스처럼 액세스할 수 있습니다."
특징들
XQuery는 Kilpelaeinen으로 [8]요약되는 단순한 유형 시스템을 갖춘 기능성, 부작용 없는 표현 지향 프로그래밍 언어입니다.
모든 XQuery 식은 시퀀스에서 동작하며 시퀀스로 평가됩니다.시퀀스는 정렬된 항목 목록입니다.항목은 XML 문서의 구성 요소를 나타내는 노드 또는 다음과 같은 XML 스키마 기본 유형의 인스턴스인 원자 값 중 하나입니다.xs:param 또는 xs:string.시퀀스는 비워 둘 수도 있고 단일 항목으로만 구성될 수도 있습니다.단일 항목과 싱글톤 시퀀스는 구분되지 않습니다. (...) XQuery/XPath 시퀀스는 중첩된 시퀀스를 제외함으로써 리스프 및 프롤로그와 같은 언어의 목록과 다릅니다.XQuery 설계자는 문서 내용 조작에 중첩된 시퀀스가 불필요하다고 생각했을 수 있습니다.대신 노드 및 하위-상위 관계에 의해 문서 구조의 중첩 또는 계층이 표시됩니다.
XQuery는 XML 문서 또는 XML로 볼 수 있는 데이터 원본(예: 관계형[9] 데이터베이스 또는 사무실 문서)에서 데이터를 추출하고 조작할 수 있는 수단을 제공합니다.
XQuery에는 XML 문서의 특정 부분을 다루기 위한 XPath 식 구문의 상위 집합이 포함되어 있습니다.조인 수행을 위한 SQL과 유사한 "FLWOR 식"으로 이를 보완합니다.FLWOR 표현식은 FOR, LET, WHERE, ORDER BY, RETURN의 5개 절로 구성됩니다.
또한 새로운 XML 문서를 구성할 수 있는 구문도 제공합니다.요소 및 속성 이름을 미리 알고 있는 경우에는 XML과 같은 구문을 사용할 수 있습니다.다른 경우에는 다이내믹노드 컨스트럭터라고 불리는 식을 사용할 수 있습니다.이러한 모든 구성 요소는 언어 내에서 표현식으로 정의되며 임의로 중첩될 수 있습니다.
이 언어는 XQuery 및 XPath Data Model(XDM; XPath 데이터 모델)을 기반으로 합니다.XDM은 XML 문서의 정보 내용에 대한 트리 구조 모델을 사용합니다.이 모델에는 문서 노드, 요소, 속성, 텍스트 노드, 주석, 처리 명령어 및 네임스페이스의 7가지 노드가 포함됩니다.
또한 XDM은 모든 값을 시퀀스로 모델링합니다(싱글톤 값은 길이1의 시퀀스로 간주됩니다).시퀀스의 항목은 XML 노드 또는 원자 값 중 하나입니다.원자값은 정수, 문자열, 부울란 등입니다.유형의 전체 목록은 XML 스키마에서 정의된 원시 유형을 기반으로 합니다.
XML 문서 또는 데이터베이스 업데이트 기능 및 전체 텍스트 검색 기능은 핵심 언어에 속하지 않지만 추가 기능 확장 표준에 정의되어 있습니다. XQuery Update Facility 1.0은 업데이트 기능을 지원하며 XQuery 및 XPath 전체 텍스트 1.0은 XML 문서에서 전체 텍스트 검색을 지원합니다.
XQuery 3.0은 함수가 조작할 수 있는 값(변수에 저장, 고차 함수에 전달 및 동적으로 호출)이라는 점에서 완전한 기능 프로그래밍에 대한 지원을 추가합니다.
예
아래 샘플 XQuery 코드는 햄릿.xml로 인코딩된 셰익스피어 희곡 햄릿의 각 액트에서 고유한 스피커를 나열합니다.
<body> <본문> { 위해서 $행동하다 에 문서("syslog.xml")//행동하다 허락하다 $스피커 := 뚜렷한 가치의($행동하다//스피커) 돌아가다 <div> <h1>{ 스트링($행동하다/제목) }</h1> <ul> { 위해서 $스피커 에 $스피커 돌아가다 <li>{ $스피커 }</li> } </ul> </div> } </body> </body> </body> 계산을 수행하기 위한 모든 XQuery 구조는 식입니다.일부 키워드가 문과 같은 동작을 시사하는 것처럼 보여도 문장은 없습니다.함수를 실행하려면 본문 내의 식이 평가되고 값이 반환됩니다.따라서 입력값을 두 배로 하는 함수를 작성하려면 다음과 같이 적습니다.
선언하다 기능. 로컬: 컨트롤러($x) { $x * 2 } 'Hello World'라는 전체 쿼리를 작성하려면 다음 식을 사용합니다.
'헬로 월드' 이 스타일은 기능성 프로그래밍 언어에서 일반적입니다.
적용들
이 섹션은 어떠한 출처도 인용하지 않습니다.(2020년 5월 (이 및 타이밍 ) |
다음은 XQuery를 사용하는 방법의 몇 가지 예입니다.
- 웹 서비스에서 사용하기 위해 데이터베이스에서 정보를 추출합니다.
- XML 데이터베이스에 저장된 데이터에 대한 요약 보고서 생성
- 웹에서 텍스트 문서를 검색하여 관련 정보를 검색하고 결과를 컴파일합니다.
- XML 데이터를 선택하여 웹에 게시할 XHTML로 변환합니다.
- 응용 프로그램 통합에 사용할 데이터베이스에서 데이터를 가져옵니다.
- 여러 트랜잭션을 나타내는 XML 문서를 여러 XML 문서로 분할합니다.
XQuery와 XSLT 비교
이 섹션은 확인을 위해 추가 인용문이 필요합니다.(2020년 5월 (이 및 타이밍 ) |
범위
XQuery는 처음에는 대량의 XML 문서 모음을 위한 쿼리 언어로 생각되었지만 개별 문서를 변환할 수도 있습니다.따라서 입력 XML 문서를 HTML 또는 기타 형식으로 변환할 수 있도록 특별히 설계된 XSLT와 기능이 중복됩니다.
XSLT 2.0 및 XQuery 표준은 W3C 내의 개별 작업 그룹에 의해 개발되었으며, 적절한 경우 공통 접근 방식을 보장하기 위해 함께 작업합니다.이들은 동일한 데이터 모델(XDM), 유형 시스템 및 함수 라이브러리를 공유하며 둘 다 하위 언어로 XPath 2.0을 포함합니다.
기원.
그러나 이 두 언어는 다른 전통에 뿌리를 두고 있으며 다른 공동체의 요구를 충족시킨다.XSLT는 주로 화면, 웹(웹 템플릿 언어) 또는 종이에 인간 독자를 위한 XML을 렌더링하는 것이 주된 목표인 스타일시트 언어로 생각되었습니다.XQuery는 주로 SQL의 전통에서 데이터베이스 쿼리 언어로 생각되었습니다.
두 언어는 서로 다른 커뮤니티에서 생성되기 때문에 XSLT는 보다 유연한 구조를 가진 서술형 문서 처리에서 더 강한[according to whom?] 반면 XQuery는 데이터 처리(예를 들어 관계형 결합을 수행할 때)에서 더 강한 성능을 발휘합니다.
버전
XSLT 1.0은 1999년에 권장사항으로 등장했지만 XQuery 1.0은 2007년 초에 권장사항이 되었습니다.그 결과 XSLT는 여전히 널리 사용되고 있습니다.XSLT 2.0에는 그룹화, 숫자 및 날짜 형식 지정, XML 네임스페이스 [10][11][12]제어 등 XQuery 1.0에는 없는 많은 기능이 있지만 두 언어 모두 표현력이 비슷합니다.이러한 기능의 대부분은 XQuery 3.[13]0용으로 계획되어 있습니다.
비교에서는 XSLT 1.0과 XSLT 2.0은 매우 다른 언어라는 점을 고려해야 합니다.특히 XSLT 2.0은 강력한 타이핑과 스키마 인식으로 이동하면서 XQuery의 영향을 많이 받았습니다.
장점과 단점
사용성 조사에 따르면 XQuery가 XSLT보다 학습하기 쉬운 것으로 나타났습니다.특히 SQL [14]등의 데이터베이스 언어에 대한 경험이 있는 사용자는 더욱 그렇습니다.이는 XQuery가 학습해야 할 개념이 적은 작은 언어라는 점과 프로그램이 더 간결하기 때문이라고 할 수 있다.또한 XQuery는 구문 컨텍스트에서 어떤 표현도 사용할 수 있다는 점에서 더 직교적입니다.반면 XSLT는 XPath 식을 XSLT 명령으로 네스트할 수 있지만 그 반대는 할 수 없는 2개 언어 시스템입니다.
XSLT는 현재 문서에 대한 작은 변경(예: 모든 NOTE 요소 삭제)을 수반하는 응용프로그램에 대해 XQuery보다 강력합니다.이러한 응용 프로그램은 일반적으로 XSLT에서 모든 노드를 변경하지 않고 복사하는 ID 템플릿을 포함하는 코딩 패턴을 사용하여 처리되며 선택한 노드를 변경하는 특정 템플릿에 의해 변경됩니다.XQuery는 이 코딩 패턴과 동등하지 않지만, 향후 버전에서는 개발 [15]중인 언어의 업데이트 기능을 사용하여 이러한 문제를 해결할 수 있습니다.
XQuery 1.0에는 동적 바인딩 또는 다형성을 위한 메커니즘이 없었습니다.이것은 XQuery 3.0에서 퍼스트 클래스 값으로 함수를 도입함으로써 수정되었습니다.이 기능의 부재는 대규모 애플리케이션을 작성할 때 또는 다른 [citation needed]환경에서 재사용할 수 있도록 설계된 코드를 작성할 때 눈에 띄기 시작합니다.XSLT는 이 영역에서 템플릿 규칙의 동적 일치와 를 사용하여 규칙을 덮어쓰는 기능이라는2가지 보완 메커니즘을 제공합니다.xsl:import여러 커스터마이제이션레이어를 사용하여 응용 프로그램을 작성할 수 있습니다.
XQuery 1.0에 이러한 기능이 없는 것은 의도적인 설계 결정이었습니다.이는 XQuery가 정적 분석에 매우 순응하기 쉽기 때문에 데이터베이스 쿼리 언어에 필요한 최적화 수준을 달성하기 위해 필수적입니다.이를 통해 컴파일 시 XQuery 코드의 오류를 쉽게 검출할 수 있습니다.
XSLT 2.0은 XML 구문을 사용하고 있기 때문에 XQuery 1.0에 비해 다소 상세하게 설명됩니다.그러나 많은 대규모 응용 프로그램은 XSLT를 사용하여 처리 파이프라인의 일부로 스타일시트를 동적으로 읽거나, 쓰거나, 수정함으로써 이 기능을 활용합니다.XML 구문을 사용하면 XML 기반 도구를 사용하여 XSLT 코드를 관리할 수도 있습니다.반면 XQuery 구문은 Java(XQuery API for Java 참조)나 C#과 같은 기존 프로그래밍 언어에 내장하는 데 더 적합합니다.필요한 경우 XQuery 코드는 XQueryX라는 XML 구문으로도 표현할 수 있습니다.XQueryX 코드의 XQueryX 표현은 다소 상세하고 인간에게는 편리하지 않지만 XSLT 스타일시트로 [16][17]변환된 XML 도구를 사용하여 쉽게 처리할 수 있습니다.
확장 및 향후 작업
W3C 확장
XQuery에 대한 두 가지 주요 확장 기능은 W3C에 의해 개발되었습니다.
- XQuery 1.0 및 XPath 2.0 전문[18]
- XQuery 업데이트 기능
둘 다 XQuery 1.0의 확장으로 권장 상태가 되었지만 리소스 부족으로 인해 XQuery 3.0을 사용하기 위한 작업이 중단되었습니다.
XQuery 3.0에 관한 작업은 2014년 [19]4월 8일 권장사항으로 발표되었으며, XQuery 3.1은 2017년 2월 현재 권장사항입니다.
XQuery의 스크립트(프로시저) 확장이 설계되었지만 [20][21]완료되지 않았습니다.
EXPath 커뮤니티[22] 그룹은 XQuery 및 기타 관련 표준(XPath, XSLT, XProc 및 XForms)에 대한 확장을 개발합니다.현재 사용할 수 있는 확장자는 다음과 같습니다.
서드파티 내선번호
JSONiq는 XQuery의 확장 기능으로, JSON 문서에서 데이터를 추출 및 변환하는 기능을 추가합니다.JSONiq는 XQuery 3.0의 슈퍼셋입니다.Creative Commons Attribution-ShareAlike 3.0 라이선스로 발행됩니다.
EXQuery[27] 프로젝트는 휴대용 XQuery 응용 프로그램 작성에 대한 표준을 개발합니다.현재 사용 가능한 표준은 다음과 같습니다.
- 레스타신기[28]
추가 정보
- XML 쿼리: 컨텍스트에서의 XQuery, XPath 및 SQL/XML.짐 멜튼과 스티븐 벅스턴입니다.모건 카우프만, 2006년 ISBN1-55860-711-0.
- Walmsley, Priscilla (2007). XQuery, 1st Edition. O'Reilly Media. ISBN 978-0-596-00634-1.
- Walmsley, Priscilla (2015). XQuery, 2nd Edition. O'Reilly Media. ISBN 978-1-4919-1510-3.
- XQuery: XML 쿼리 언어입니다.마이클 브런디지애디슨 웨슬리 프로페셔널, 2004년ISBN 0-321-16581-0.
- Experts의 XQuery: W3C XML 쿼리 언어 가이드.하워드 캣츠(에드)애디슨 웨슬리, 2004년ISBN 0-321-18060-7.
- XQuery FLWOR 식 개요마이클 케이 박사(W3C XQuery Committee), 2005.
실장
| 이름. | 면허증. | 언어 | XQuery 3.1 | XQuery 3.0 | XQuery 1.0 | XQuery 업데이트 1.0 | XQuery 전문 1.0 |
|---|---|---|---|---|---|---|---|
| 베이스X | BSD 라이선스 | 자바 | 네. | 네. | 네. | 네. | 네. |
| 존재하다 | LGPL | 자바 | 부분적 | 부분적 | 네. | 아니요. | 아니요. |
| 마크 로직 | 독자 사양 | C++ | 아니요. | 부분적 | 네. | 아니요. | 아니요. |
| 색슨 HE | Mozilla Public License(모질라 퍼블릭 라이선스) | 자바 | 부분적 | 부분적 | 네. | 네. | 아니요. |
| 색슨 EE | 독자 사양 | 자바 | 네. | 네. | 네. | 네. | 아니요. |
| 조르바 | Apache 라이선스 | C++ | 아니요. | 네. | 네. | 네. | 네. |
그 외의 실장은 다음과 같습니다.
- Oracle XQuery for Hadoop: "Using Oracle XQuery for Hadoop". Archived from the original on 2016-03-04.
- Oracle: Java용 XQuery 프로세서
- RaptorXML 서버:Altova의 XSLT 및 XQuery 엔진
- Sirix: XQuery(버전 확장 기능
- XQilla: XQilla XQuery 구현
- SPARQL2XQuery: SPARQL에서 XQuery로 번역
- Galax – 오픈 소스 XQuery 구현.
- Db2 – IBM DB2의 XQuery 구현.
- Xidel – 오픈 소스 XQuery 3.0 구현
조사
- XQuery 테스트 스위트 결과: XQuery 1.0 기능 준수
- EXPath: XPath/XQuery 엔진(기능 매트릭스 포함)
- W3C: XQuery 구현
레퍼런스
- ^ "XQuery 3.1 Recommendation". 2017-03-21.
- ^ "XQuery 3.1: An XML Query Language". 2017-03-21.
- ^ "XQuery and Static Typing".
- ^ "XML and Semantic Web W3C Standards Timeline" (PDF). 2012-02-04.
- ^ "XQuery 3.0 Recommendation". 2014-04-08.
- ^ "XQuery 3.1 Recommendation". 2017-03-21.
- ^ W3C (2003-10-25). "cited by J.Robie".
- ^ Kilpeläinen, Pekka (2012). "Using XQuery for problem solving" (PDF). Software: Practice and Experience. 42 (12): 1433–1465. doi:10.1002/spe.1140. S2CID 15561027.
- ^ "XQuery를 통한 데이터 검색"2016년 1월 18일 취득.
- ^ Kay, Michael (May 2005). "Comparing XSLT and XQuery".
- ^ Eisenberg, J. David (2005-03-09). "Comparing XSLT and XQuery".
- ^ Smith, Michael (2001-02-23). "XQuery, XSLT "overlap" debated".
- ^ "XQuery 3.0 requirements".
- ^ XML 쿼리 언어의 사용성.요리스 그라우만스.SIKS 논문 시리즈 2005-16, ISBN 90-393-4065-X
- ^ "XQuery Update Facility".
- ^ "XML Syntax for XQuery (XQueryX)".
- ^ Michael Kay. "Saxon diaries: How not to fold constants".
- ^ XQuery 및 XPath 전문 1.0
- ^ XML 쿼리(XQuery) 3.0
- ^ XQuery 스크립트 확장 1.0 요건
- ^ XQuery 1.0 스크립팅 확장
- ^ EXPath 커뮤니티 그룹
- ^ 패키징 시스템
- ^ 파일 모듈
- ^ 바이너리 모듈
- ^ 웹 응용 프로그램
- ^ "Standard for portable XQuery applications". Retrieved 12 December 2013.
- ^ "RESTXQ 1.0: RESTful Annotations for XQuery".
- 'XML 해커'(O'Reilly Media) 및 'XQuery'(O'Reilly Media)에서 허가를 받아 빌린 부분.
- 프랑스어 위키피디아 기사에 근거한 이전 버전
외부 링크
- W3C XML 쿼리(XQuery)
- XQuery 튜토리얼
- XQuery API for Java(XQJ) Java 사양 요청
- XML 형식의 햄릿.xml 햄릿
- XQuery (프레젠테이션 - HTML 슬라이드)
- 오픈 소스 XQuery 구현 목록
