제이소닉
JSONiq패러다임 | 선언적, 기능적, 모듈적 |
---|---|
타이핑 규율 | 역동적이고 강한 |
OS | 크로스 플랫폼 |
파일 이름 확장명 | .jq, .jqy |
웹사이트 | www |
영향을 받은 | |
XQuery, SQL |
JSONiq는 JSON, XML, 비정형 텍스트 데이터뿐만 아니라 계층적 및 이기종 데이터 수집을 선언적으로 쿼리하고 변환하도록 설계된 쿼리 및 기능 프로그래밍 언어다.
JSONiq는 Creative Commons Attribution-ShareAlike 3.0 라이센스에 따라 발행되는 공개 사양이다.그것은 XQuery 언어를 기반으로 하며, 이 언어와 원자 유형에 대한 동일한 핵심 표현식과 연산을 공유한다.JSONiq는 두 가지 구문학적 맛으로 제공되며, JSON과 XML을 모두 기본적으로 지원한다.
- JSONiq 구문(JSON의 상위 집합)은 호환되는 XQuery 하위 집합을 통해 XML을 지원하며 확장되었다.
- XQuery 구문(원래 XML 지원)은 위의 JSONiq 구문의 호환 가능한 서브셋(XQuery로 JSONiq 확장)을 통해 JSON 지원으로 확장되었다.
특징들
JSONiq는 주로 JSON 문서 또는 JSON으로 볼 수 있는 모든 데이터 소스(예: 관계형 데이터베이스 또는 웹 서비스)에서 데이터를 추출하고 변환하는 수단을 제공한다.
이러한 작업을 수행하기 위한 주요 표현은 XQuery에서 유래한 SQL과 같은 "FLWOR 표현식"이다.FLWOR 표현은 FOR, LET, WHERE, ORDER BY, RETURN의 다섯 절에서 생성되지만, 그룹화 및 창구 작업을 위한 조항도 지원한다.
언어는 또한 필드 이름과 값이 사전에 알려져 있거나 동적으로 계산될 수 있는 새로운 JSON 문서를 구성하기 위한 구문을 제공한다.JSONiq 언어(XQuery로의 확장이 아님)는 JSON의 상위 집합이다.즉, 각 JSON 문서는 유효한 JSONiq 프로그램이다.
또한 이 언어는 JSON 어레이에서 값뿐만 아니라 JSON 개체에서 필드 이름과 값을 추출하기 위한 탐색 구문도 지원한다.항법 수술은 값이 없거나, 값이 이질적인 경우 오류를 일으키지 않고 예측하지 못한 값을 묵묵히 무시한다는 점에서 탄력적이다.
모든 구문은 언어 내의 표현으로 정의되며 임의로 내포될 수 있다.
JSONiq는 JSON 또는 XML 문서를 업데이트하는 기능을 포함하지 않으며 전체 텍스트 검색 기능이 없으며 문장이 없다.이 모든 특징들은 그 언어의 후속 버전에 대해 활발한 개발 중에 있다.
JSONiq는 임의의 JSON을 JSON으로, XML을 XML로 변환하여 표현할 수 있는 프로그래밍 언어다.또한 JSON과 XML 사이의 변환을 허용한다. 그러한 변환은 모두 다음과 같은 특징을 가지고 있다.
- 논리적/물리적 데이터 독립성
- 선언적
- 하이 레벨
- 부작용 없음
- 강하게 입력됨
데이터 모델
언어는 XQuery와 XPath Data Model(XDM)의 확장인 JSONiq Data Model(JDM)을 기반으로 한다.JDM은 JSON 또는 XML 문서의 정보 컨텐츠의 트리 구조 모델을 사용한다.XML 스키마에서 정의되는 정수, 문자열, 부울 등의 원자 값뿐만 아니라 JSON 객체, JSON 배열, 모든 종류의 XML 노드를 포함한다.
JDM은 설정 지향 언어의 기초를 형성하는데, 그 데이터 모델의 예는 시퀀스(단일 톤 값은 길이 1의 시퀀스로 간주된다)이다.시퀀스의 항목은 JSON 객체, JSON 배열, XML 노드 또는 원자 값일 수 있다.
예
아래 샘플 JSONiq 코드는 JSON 개인 객체 모음에서 지역 코드와 20세 이상의 모든 사람의 수를 계산한다(예: 객체는 JSON 문서 참조).
을 위해 $p 에 수집("사람들") 어디에 $p.age. GT 20 하게 하다 $본국의 := $p.p.전화번호[][$$.타자를 치다 eq "집"].번호를 붙이다 그룹별로 나누다 $면적 := 이전의 하위 문자열($본국의, " ") 돌아오다 { "지역 번호" : $면적, "카운트" : 수를 세다($p) }
모든 JSONiq 구성물은 표현이며 함수의 본문에도 포함될 수 있다.
선언하다 기능을 발휘하다 local:message() { 을 위해 $p 에 수집("사람들") 어디에 $p.age. GT 20 돌아오다 $p };
다음 쿼리는 XQuery 구문(XQuery로 확장된 JSONiq)을 사용하여 각 개인 개체의 일부를 XML 요소로 변환한다.
을 위해 $p 에 수집("사람들") 돌아오다 <사람> <이름>{$p("이름")}</이름> <이름>{$p("성")}</성명> <나이>{$p("나이")}</나이> </사람>
적용들
다음은 JSONiq를 사용할 수 있는 방법과 장소에 대한 몇 가지 예시들이다.
- 웹 서비스에 사용할 데이터베이스에서 정보 추출
- JSON 문서 저장소에 저장된 데이터에 대한 요약 보고서 생성
- 웹에 게시할 XHTML로 JSON 데이터 선택 및 변환
- 다양한 소스 및 형식(예: JSON 문서 저장소, XML 데이터베이스, 관계 데이터베이스 및 웹 서비스)의 데이터를 상호 연결하여 웹 서비스로 제공.
- JSON 개체의 컬렉션을 다른 스키마로 변환.
두 통사적 맛의 비교
JSONiq의 구문은 두 가지로, 사용자가 JSON이나 XML에 초점을 맞추고 있는지 여부에 따라 사용할 수 있다. 두 구문은 동일한 데이터 모델을 사용하며 몇 가지 예외까지 매우 유사하다.
JSONiq 구문
순수한 JSONiq 구문은 JSON의 상위 집합이다.모든 표현과 의미론을 사용할 수 있음에도 불구하고 XQuery의 상위 집합을 엄격하게 말하는 것은 아니다.JSONiq 구문의 다음 측면은 XQuery 컨포머리가 아니다.
- 점을 포함하는 이름 없음.
- 컨텍스트 항목($ 대신 $를 사용해야 함)에 대한 .
- 단음절 리터럴은 없다.
- JSON, 백슬래시 기반 문자열 리터럴 탈출.
- 상대 경로 식의 시작에는 축 단계가 허용되지 않는다.
JSONiq 확장이 있는 XQuery 구문
XQuery에 대한 JSONiq 확장자는 XQuery의 상위 집합이지만 JSON의 상위 집합은 아니다.완전히 일치하며 XQuery 3.0 후보 추천과 역호환된다.XQuery 구문에서는 JSONiq의 다음 측면이 지원되지 않는다.
- 도트 기반 개체 조회($object("key") 대신) 없음.
- 컨텍스트 항목에 $ 없음.
- XML, 앰퍼샌드 기반 문자열 리터럴 탈출.
- 개체 키를 따옴표로 묶어야 함
- 참/거짓/null 리터럴 없음
- 내장형 원자형은 xs로 접두사를 붙여야 한다.
- 비원자형은 괄호 뒤에 와야 한다.
- 빈순()은 그렇게 써야 한다.
- 배열 조회 및 [] 배열 해제 없음.
추가 읽기
- JSONIQ - NoSQL의 SQL.기슬랭 포니.CreateSpace 독립 출판 플랫폼. ISBN1489530371.
구현
- Zorba: JSONiq 및 JSONiq Extension to XQuery
- IBM WebSphere: JSONiq를 XQuery로 확장
- BeniBela Internet Tools: JSONiq를 XQuery로 확장