자바용 XQuery API

XQuery API for Java
XQJ
개발자자바 커뮤니티 프로세스
안정적 해제
1.0 / 2009년 6월 24일(2009-06-24)
유형데이터 액세스 API
웹사이트JSR 225: 자바용 XQuery API
XQJ 드라이버가 Java 응용프로그램의 XML 데이터베이스와 통신하는 방법에 대한 일반 아키텍처.

XQJ(XQuery API for Java, XQJ)는 W3C XQuery 1.0 규격의 공통 자바 API를 말한다.

XQJ API를 통해 자바 프로그래머는 벤더의 진입을 줄이거나 제거하면서 XML 데이터 소스(예: XML 데이터베이스)에 대해 XQuery를 실행할 수 있다.

XQJ API는 자바 개발자들에게 XQuery Data Model에 대한 인터페이스를 제공한다.[1] 그것의 디자인은 클라이언트/서버 느낌을 가진 JDBC API와 유사하며, "연결" 부분은 전체 API의 매우 작은 부분이지만, 서버 기반 XML 데이터베이스와 클라이언트 쪽 XQuery 프로세서에 잘 적합하지 않다. XQJ API 사용자는 Java 값을 XQuery 표현식에 바인딩하여 코드 주입 공격을 방지할 수 있다.[2] 또한 복수의 XQuery 식을 원자 거래의 일부로 실행할 수 있다.

이력 및 구현

자바용 XQuery API는 자바 커뮤니티 프로세스에서 JSR 225로 개발되었다. [3][4][5][6]회사는 오라클,[5][6] IBM, BEA [7]시스템즈, 소프트웨어 [8]AG, 인텔, 노키아, 데이터 다이렉트와 같은 몇몇 큰 기술 지원을 가지고 있었다.[4]

2009년 6월 24일 자바 규격용 XQuery API 버전 1.0이 자바Docs, 참조 구현 및 벤더가 준수해야 하는 TCK(기술 호환성 키트)와 함께 출시되었다.[9]

XQJ 클래스는 Java 패키지에 포함되어 있음 javax.xml.xquery

예를 들어 기능, 배열, 지도 등의 데이터 모델에 추가하기 위한 Java 바인딩을 제공함으로써 XQuery 3.0 또는 3.1에 대한 지원을 제공하는 XQJ 버전을 만드는 (가시적) 활동은 없다.

기능

XQJ는 동일한 애플리케이션에서 여러 구현이 존재하며 사용될 수 있도록 허용한다.

XQJ 연결은 XQuery 식 생성 및 실행을 지원한다. 표현식은 업데이트[10] 중이거나 전체 텍스트 검색을 포함할 수 있다.[11] XQJ는 다음 클래스 중 하나를 사용하여 XQuery 식을 나타낸다.

  • XQExpression – 표현식은 매번 XQuery 프로세서로 전송된다.
  • XQPreparedExpression – 식을 캐시하고 실행 경로를 미리 설정하여 효율적인 방법으로 여러 번 실행할 수 있다.

XQuery 표현식은 XQJ에 표시된 XDM[1] 항목의 결과 시퀀스를 XQResultSequence 접점 프로그래머는 a를 사용할 수 있다. XQResultSequence 결과 시퀀스에서[1] 개별 XDM 항목을 살펴보십시오. 시퀀스의 각 항목에는 노드 유형과 같은 XDM[1] 유형 정보가 연관되어 있다. element(), document-node() 또는 다음과 같은 XDM 원자 유형 xs:string, xs:integer 또는 xs:dateTime. XQJ의 XDM 유형 정보는 다음을 통해 검색할 수 있다. XQItemType 접점

원자성 XQuery 항목을 Java 원시 요소에 쉽게 캐스팅할 수 있음 XQItemAccessor 와 같은 방법들 getByte() 그리고 getFloat()또한 XQuery 항목과 시퀀스를 DOM에 직렬화할 수 있음 Node, 색스 ContentHandler, StAX XMLStreamReader 일반 IO Reader 그리고 InputStream

기본 예

다음 예제는 XML 데이터베이스에 대한 연결을 생성하고 XQuery 식을 제출한 후 Java에서 결과를 처리하는 방법을 보여준다. 모든 결과가 처리되면 연결된 모든 리소스를 확보하기 위해 연결이 닫힌다.

// XML 데이터베이스에 대한 새 연결 만들기 XQConnection 코너를 돌다 = vendorDataSource.getConnection("myUser", "myPassword");  XQExpression 생략하다 = 코너를 돌다.createExpression(); // 재사용 가능한 XQuery 표현식 개체 생성  XQResultSequence 결과 = 생략하다.executeQuery(   "fn:collection('catalog in"//" +   "return fn:data($n/name"); // XQuery 식 실행  // 결과 시퀀스를 반복적으로 처리 하는 동안에 (결과.다음에()) {     // 현재 항목을 순서대로 인쇄     시스템.밖으로.인쇄하다("제품명: " + 결과.GetItemAsString(무효의)); }  // 연결로 생성된 모든 리소스 사용 가능 코너를 돌다.가까운.(); 

외부 변수에 값 바인딩

다음 예는 XQuery 식에서 외부 변수에 Java 값을 바인딩할 수 있는 방법을 보여준다. 연결 상태를 가정해 보십시오. conn 이미 존재함:

XQExpression 생략하다 = 코너를 돌다.createExpression();  // 실행할 XQuery 식  es = "xs로 변수 $x를 지정:외부 값으로 지정" +             "fn:collection('catalog in"//" +             "여기서 $n/price <=$x" +             "return fn:data($n/name";  // QNamee x를 사용하여 값(21)을 외부 변수에 바인딩 생략하다.바인딩인트(새로운 큐나메("x"), 21, 무효의);  // XQuery 식 실행 XQResultSequence 결과 = 생략하다.executeQuery(es);  // 반복적으로 결과(시퀀스) 처리 하는 동안에 (결과.다음에()) {     // 결과 처리... } 

기본 데이터 유형 매핑

JavaXQuery 데이터 유형 간의 매핑은 대체로 유연하지만 XQJ 1.0 규격에는 사용자가 지정하지 않은 데이터 유형을 매핑하는 기본 매핑 규칙이 있다. 이러한 매핑 규칙은 JAXB에서 찾을 수 있는 매핑 규칙과 매우 유사하다.

다음 표는 XQuery 식에서 외부 변수에 Java 값을 바인딩하는 경우에 대한 기본 매핑 규칙을 보여준다.

Java 데이터 유형에서 XQuery 데이터 유형으로 매핑할 때의 기본 변환 규칙
자바 데이터 유형 기본 XQuery 데이터 유형
boolean xs:boolean
byte xs:byte
byte[] xs:hexBinary
double xs:double
float xs:float
int xs:int
long xs:long
short xs:short
Boolean xs:boolean
Byte xs:byte
Float xs:float
Double xs:double
Integer xs:int
Long xs:long
Short xs:short
String xs:string
BigDecimal xs:decimal
BigInteger xs:integer
Duration xs:dayTimeDuration 만약 Duration 개체의 상태는 xs:dayTimeDuration
xs:yearMonthDuration 만약 Duration 개체의 상태는 xs:yearMonthDuration
xs:duration 만약 Duration 개체의 상태는 xs:duration
XMLGregorianCalendar xs:date 만약 XMLGregorianCalendar 개체의 상태는 xs:date
xs:dateTime 만약 XMLGregorianCalendar 개체의 상태는 xs:dateTime
xs:gDay 만약 XMLGregorianCalendar 개체의 상태는 xs:gDay
xs:gMonth 만약 XMLGregorianCalendar 개체의 상태는 xs:gMonth
xs:gMonthDay 만약 XMLGregorianCalendar 개체의 상태는 xs:gMonthDay
xs:gYear 만약 XMLGregorianCalendar 개체의 상태는 xs:gYear
xs:gYearMonth 만약 XMLGregorianCalendar 개체의 상태는 xs:gYearMonth
xs:time 만약 XMLGregorianCalendar 개체의 상태는 xs:time
QName xs:QName
Document document-node(element(*, xs:untyped))
DocumentFragment document-node(element(*, xs:untyped))
Element element(*, xs:untyped)
Attr attribute(*, xs:untypedAtomic)
Comment comment()
ProcessingInstruction processing-instruction()
Text text()

알려진 구현

네이티브 XML 데이터베이스

다음은 자바 구현을 위한 XQuery API가 있는 것으로 알려진 네이티브 XML 데이터베이스의 목록이다.

관계형 데이터베이스

DataDirectXQuery 코드를 즉시 SQL로 변환한 다음 SQL 결과 집합을 XQJ가 추가로 처리하기에 적합한 형식으로 변환하여 관계형 데이터베이스를 위한 XQJ 어댑터를 제공한다. 다음은 몇 가지 알려진 구현이다.

데이터베이스 이외의 구현

다음은 Java 인터페이스용 XQuery API를 제공하는 비 데이터베이스 XQuery 프로세서의 목록이다(일반적으로 파일스토어 XML에서 구문 분석하여 DOM 또는 유사한 트리로 메모리에 보관된 문서에 대해 쿼리를 허용함).

면허증

사양은 "Copyright right 2003, 2006 - 2009 Oracle"로 표기되어 있다. 모든 권리 보유."

이 규격에는 "사양 라이센스"와 "참조 구현 라이센스"라는 두 가지 별도의 라이센스가 포함되어 있다.

규격 라이선스는 저작권 통지가 유지되는 경우 규격의 자유로운 복사를 허용하며, 전체 규격을 완전히 구현하고, 인터페이스를 수정 또는 확장하지 않으며, 호환성 t를 통과하는 경우 규격의 구현을 생성하고 배포할 수 있는 라이선스를 부여한다.에스트스

이 조항은 일부 논란을 일으켰다. 첫째로, 발표된 규격을 이행하는 것이 라이선스를 필요로 하는 것이라는 것(즉, 저작권법이 라이선스가 없는 경우 이를 허용하지 않을 것이라는 것)은 보편적으로 받아들여지지 않는다.[20][21] 둘째, 확장 및 수정 금지 때문에 라이센스가 오픈 소스 라이센스로서의 자격을 갖추는 기준을 충족하지 못한다(오픈 소스 정의 참조). 이로 인해 일부 오픈 소스 매니아들은 XQJ 구현이 진정한 오픈 소스로 간주될 수 있는지에 대해 이의를 제기하게 되었다.

참조 구현을 위한 라이센스는 상당히 전통적인 BSD 스타일의 오픈 소스 라이센스다.

참조

  1. ^ a b c d XQuery 1.0 및 XPath 2.0 데이터 모델(XDM)
  2. ^ Java 변수 바인딩
  3. ^ XML 쿼리: XQuery, XPath 및 SQL/XML 컨텍스트 - Jim Melton 및 Stephen Buxton. ISBN978-1558607118
  4. ^ a b XQJ - XQuery Java API 완료, Marc Van Capellen, Zhen Hua 류, Jim MeltonMaxim Orgiyan Archived 2012년 7월 28일 웨이백 머신보관
  5. ^ a b IBM 및 Oracle XQJ(Java용 XQuery API) Java 사양 요청 제출
  6. ^ a b XQJ(XQuery API for Java) - Andrew Eisenberg, IBMJim Melton, Oracle Archived 2012년 7월 28일 Wayback Machine에 보관
  7. ^ BEA 스트리밍 XQuery 프로세서
  8. ^ 2013년 5월 30일 웨이백 머신보관타미노 네이티브 XML 데이터베이스를 위한 XQJ 인터페이스
  9. ^ JSR-000225 자바용 XQuery API(최종 릴리즈)
  10. ^ XQuery 업데이트 기능
  11. ^ XQuery 전체 텍스트
  12. ^ MarkLogic XQJ API
  13. ^ eXist XQJ API
  14. ^ BaseX XQJ API
  15. ^ Sedna XQJ API
  16. ^ XQJ를 위한 Oracle XML DB 지원
  17. ^ 소프트웨어 AG - CentraSite XQJ 인터페이스 사용
  18. ^ XQJ 바인딩이 긴 조르바 2.5 선박, 2012년 6월 14일
  19. ^ Oracle XML Developer's Kit(XDK)는 Java 애플리케이션에서 사용할 수 있는 독립형 XQuery 1.0 프로세서를 제공한다.
  20. ^ http://rosenlaw.com/wp-content/uploads/Open-Standards.pdf
  21. ^ http://www.groklaw.net/articlebasic.php?story=20120221094600287

외부 링크