JSONiq
Paradigm | deklarativ , funktionell , modulär |
---|---|
Maskinskrivningsdisciplin | dynamisk , stark |
OS | Cross-plattform |
Filnamnstillägg | .jq, .jqy |
Hemsida | |
Influerad av | |
XQuery , SQL |
JSONiq är ett fråge- och funktionellt programmeringsspråk som är designat för att deklarativt fråga och transformera samlingar av hierarkiska och heterogena data i formatet JSON , XML , såväl som ostrukturerad textdata.
JSONiq är en öppen specifikation publicerad under licensen Creative Commons Attribution-ShareAlike 3.0 . Det är baserat på XQuery -språket, med vilket det delar samma kärnuttryck och operationer på atomtyper. JSONiq kommer i två syntaktiska smaker, som båda stöder JSON och XML inbyggt.
- JSONiq-syntaxen (en superset av JSON) utökas med XML-stöd genom en kompatibel delmängd av XQuery.
- XQuery-syntaxen (native XML-stöd) utökades med JSON-stöd genom en kompatibel delmängd (JSONiq-tillägget till XQuery) av ovanstående JSONiq-syntax.
Funktioner
JSONiq tillhandahåller i första hand sätt att extrahera och transformera data från JSON-dokument eller någon datakälla som kan ses som JSON (t.ex. relationsdatabaser eller webbtjänster ).
Det huvudsakliga uttrycket för att utföra sådana operationer är det SQL -liknande " FLWOR -uttrycket" som kommer från XQuery. Ett FLWOR-uttryck är konstruerat från de fem satserna som det heter efter: FOR, LET, WHERE, ORDER BY, RETURN. Men det stöder också satser för att göra gruppering och fönster.
Språket tillhandahåller också syntax för att konstruera nya JSON-dokument där antingen fältnamnen och värdena är kända i förväg eller kan beräknas dynamiskt. JSONiq-språket (inte tillägget till XQuery) är en superset av JSON. Det vill säga att varje JSON-dokument är ett giltigt JSONiq-program.
Dessutom stöder språket också en navigeringssyntax för att extrahera fältnamn och värden från JSON-objekt såväl som värden från JSON-matriser. Navigering är motståndskraftig i frånvaro av värden, eller om värden är heterogena, genom att den tyst ignorerar oförutsedda värden utan att ge upphov till fel.
Alla konstruktioner definieras som uttryck inom språket och kan kapslas godtyckligt.
JSONiq innehåller inte funktioner för uppdatering av JSON- eller XML-dokument, den har inga fulltextsökningsmöjligheter och har inga uttalanden. Alla dessa funktioner är under aktiv utveckling för en efterföljande version av språket.
JSONiq är ett programmeringsspråk som kan uttrycka godtyckliga JSON till JSON eller XML till XML transformationer. Det tillåter också transformationer mellan JSON och XML. Alla sådana transformationer har följande egenskaper:
- Logisk/fysisk dataoberoende
- Deklarativ
- Hög nivå
- Biverkningsfri
- Starkt skrivet
Datamodell
Språket är baserat på JSONiq Data Model (JDM) som är en förlängning av XQuery och XPath Data Model ( XDM). JDM använder en trädstrukturerad modell av informationsinnehållet i ett JSON- eller XML-dokument. Den innehåller JSON-objekt, JSON-matriser, alla typer av XML-noder, såväl som atomära värden som heltal, strängar eller booleska som alla definieras i XML Schema .
JDM utgör grunden för ett uppsättningsorienterat språk, genom att instanser av datamodellen är sekvenser (ett singeltonsvärde anses vara en sekvens med längden ett). Objekten i en sekvens kan vara JSON-objekt, JSON-matriser, XML-noder eller atomvärden.
Exempel
Exempel JSONiq-koden nedan beräknar riktnumret och antalet personer som är äldre än 20 från en samling JSON-personobjekt (se JSON -artikeln för ett exempelobjekt).
för $ p i samling ( "personer" ) där $ p.age gt 20 let $ home := $ p.phoneNumber [][ $ $. typ eq "hem" ] . nummergrupp efter $ area := substring-before ( $ home , " " ) return { "riktnummer" : $ area , "count" : count ( $ p ) }
Alla JSONiq-konstruktioner är uttryck och kan också ingå i en funktions body.
deklarera funktionen local:adults () { för $ p i samling ( "persons" ) där $ p.age gt 20 returnerar $ p };
Nästa fråga omvandlar delar av varje personobjekt till ett XML-element med hjälp av XQuery-syntaxen (JSONiq-tillägg till XQuery).
för $ p i samlingen ( "personer" ) returnera <person> <firstName> { $ p ( "firstName" )} </firstName> <lastName> { $ p ( "efternamn" )} </lastName> <age> { $ p ( "ålder" )} </age> </person>
Ansökningar
Nedan finns några exempel på hur och var JSONiq kan användas:
- Extrahera information ur en databas för att användas i en webbtjänst.
- Generera sammanfattande rapporter om data lagrade i ett JSON-dokumentarkiv.
- Välja och transformera JSON-data till XHTML för att publiceras på webben.
- Korrelera data från olika källor och format (t.ex. JSON-dokumentarkiv, XML-databas, relationsdatabas och webbtjänst) och erbjuda det i en webbtjänst.
- Omvandla samlingar av JSON-objekt till ett annat schema.
Jämförelse av de två syntaktiska smakerna
Det finns två syntaxer för JSONiq, som användare kan använda om de fokuserar på JSON eller XML. Båda syntaxerna använder samma datamodell och är väldigt lika upp till några få undantag.
JSONiq-syntax
Den rena JSONiq-syntaxen är en superset av JSON. Det är strängt taget inte en superset av XQuery även om alla dess uttryck och semantik är tillgängliga. Följande aspekter av JSONiq-syntaxen är inte XQuery-kompatibla:
- Inga namn som innehåller prickar.
- Nej . för kontextobjektet ($$ måste användas istället).
- Inga enstaka citerade bokstaver.
- JSON, omvänt snedstreck-baserad escape i strängliterals .
- Inget axelsteg tillåtet i början av ett relativt banuttryck.
XQuery-syntax med JSONiq-tillägg
JSONiq-tillägget till XQuery är en superset av XQuery men inte en superset av JSON. Den är helt överensstämmande och bakåtkompatibel med XQuery 3.0-kandidatrekommendation. Följande aspekter av JSONiq stöds inte i XQuery-syntaxen.
- Ingen punktbaserad objektsökning ($object(“nyckel”) istället).
- Inga $$ för kontextobjektet.
- XML, et-tecken-baserad escape of string literals.
- Objektnycklar måste citeras
- Inga sanna/falska/noll bokstaver
- Inbyggda atomtyper måste föregås med xs:.
- Icke-atomära typer måste följas av parentes.
- Tom-sekvensen() måste skrivas som sådan.
- Ingen arrayuppslagning och ingen [] arrayunboxing.
Vidare läsning
- JSONiq - SQL av NoSQL. Ghislain Fourny. CreateSpace Independent Publishing Platform. ISBN 1489530371 .
Genomföranden
- Zorba : JSONiq och JSONiq Extension till XQuery
- IBM WebSphere : JSONiq-tillägg till XQuery
- BeniBela Internet Tools : JSONiq-tillägg till XQuery