JsonML - JsonML
| Internetmedietype |
application/jsonml+json (uofficielt) |
|---|---|
| Type format | Markup sprog og web skabelon system |
| Forlænget fra | XML , JSON og JavaScript |
JsonML , JSON Markup Language er et let markeringssprog, der bruges til at kortlægge mellem XML (Extensible Markup Language) og JSON (JavaScript Object Notation). Det konverterer et XML -dokument eller -fragment til en JSON -datastruktur, så det er let at bruge i JavaScript -miljøer, f.eks. En webbrowser , hvilket muliggør manipulation af XML -data uden overhead af en XML -parser.
JsonML har størst anvendelighed i Ajax (asynkron JavaScript og XML) webapplikationer. Det bruges til at transportere XHTML (eXtensible HyperText Markup Language) ned til klienten, hvor det deterministisk kan rekonstrueres til DOM (Document Object Model) -elementer. Progressiv forbedringsstrategi kan anvendes under konstruktionen til at binde dynamisk adfærd til ellers statiske elementer.
JsonML kan også bruges som den underliggende struktur til oprettelse af indviklede skabeloner på klientsiden kaldet JBST (JsonML+Browser-side skabeloner). Syntaktisk ligner JBST brugerkontroller af JSP (JavaServer Pages) eller ASP.NET (Active Server Pages .NET). Interaktive eksempler er tilgængelige på webstedet jsonml.org.
Syntaks
Konvertering fra XML til JsonML er delvist reversibel. XML Namespaces håndteres kode ved at skrive elementet navn med namespace præfiks, fx <myns:myElement/>bliver ["myns:myElement"].
Eksempel Transformation
JsonML tillader ethvert XML -dokument at blive repræsenteret entydigt som en JSON -streng. Syntaksen bruger:
- JSON -arrays til at repræsentere XML -elementer;
- JSON objekter til at repræsentere attributter;
- JSON -strenge repræsenterer tekstnoder.
| JsonML kodet | Original XML |
|---|---|
["person",
{"created":"2006-11-11T19:23",
"modified":"2006-12-31T23:59"},
["firstName", "Robert"],
["lastName", "Smith"],
["address", {"type":"home"},
["street", "12345 Sixth Ave"],
["city", "Anytown"],
["state", "CA"],
["postalCode", "98765-4321"]
]
]
|
<!-- XML representation of a person record -->
<person created="2006-11-11T19:23" modified="2006-12-31T23:59">
<firstName>Robert</firstName>
<lastName>Smith</lastName>
<address type="home">
<street>12345 Sixth Ave</street>
<city>Anytown</city>
<state>CA</state>
<postalCode>98765-4321</postalCode>
</address>
</person>
|
En "almindelig" JSON-transformation frembringer en mere kompakt repræsentation, men mister nogle af dokumentets strukturoplysninger, idet den ikke definerer, om et nøgleværdipar er en attribut eller en knude:
{"person": {
"address": {
"city": "Anytown",
"postalCode": "98765-4321",
"state": "CA",
"street": "12345 Sixth Ave",
"type": "home"
},
"created": "2006-11-11T19:23",
"firstName": "Robert",
"lastName": "Smith",
"modified": "2006-12-31T23:59"
}}
"Objektform" Misnomer
I en JSON -brugergruppetråd brugte Douglas Crockford forkert udtrykket "JsonML" til at beskrive to varianter: "matrixform" og "objektform". Dette var et misbrug af udtrykket JsonML, som altid har betydet, hvad Crockford omtalte som "array -formen".
Sammenligning med lignende teknologier
XML/XSLT
XML og XSLT (Extensible Stylesheet Language Transformations) kan også producere skabeloner på klientsiden, og begge tillader cachelagring af skabelonen adskilt fra dataene. Mange programmører finder imidlertid, at syntaksen for JBST er lettere at administrere på grund af dens fortrolighed. JBST bruger JavaScript indbygget i skabelonen i stedet for at kræve blanding af forskellige typer kontrolsprog.
Indre HTML
Selvom de tilsyneladende bruges til at udføre lignende opgaver, er JsonML og innerHTML ganske forskellige. InnerHTML kræver alt markup i en nøjagtig form, hvilket betyder, at enten serveren gengiver markeringen, eller at programmøren udfører dyre strengindkoblinger i JavaScript.
JsonML bruger klientsiden templating gennem JBST, hvilket betyder, at HTML omdannes til et JavaScript skabelon på build tid . På kørselstidspunktet leveres dataene, og DOM -elementer er resultatet. De resulterende DOM -elementer kan indsættes eller erstatte et eksisterende element, som innerHTML ikke let kan undvære at skabe overskydende DOM -elementer. Rebinding kræver kun at anmode om yderligere data, hvilket er mindre end fuldt udvidet markup. Som et resultat opnås der ofte store præstationsgevinster, da markeringen anmodes om eller cachelagres adskilt fra dataene.
HTML-meddelelsesmønster/Browserside-skabelon
For enkelhedens skyld har innerHTML været den foretrukne metode til HTML-meddelelsesmønsteret i Ajax. Værktøjer som JsonFx har imidlertid til formål at forenkle JsonML- og JBST-implementering, mens de stadig giver et fuldt browser-side-skabelon Ajax-mønster.
Referencer
eksterne links
- JsonML.org
- IBM developerWorks -artikel
- Java JSONML -implementering - skrevet af Douglas Crockford
- JsonFx.NET - C#/. NET JBST Framework
- C ++ JDX XPath 2.0 til XML, JSON og JsonML