JsonML
Internet mediatyp |
application/jsonml+json (inofficiell) |
---|---|
Typ av format | Markup language och webbmallssystem |
Förlängt från | XML , JSON och JavaScript |
JsonML , JSON Markup Language är ett lättviktigt märkningsspråk som används för att mappa mellan XML (Extensible Markup Language) och JSON (JavaScript Object Notation). Den konverterar ett XML-dokument eller -fragment till en JSON-datastruktur för enkel användning i JavaScript- miljöer som en webbläsare , vilket möjliggör manipulering av XML-data utan att behöva använda en XML-parser.
JsonML har störst tillämpbarhet i Ajax (asynkron JavaScript och XML) webbapplikationer. Det används för att transportera XHTML (eXtensible HyperText Markup Language) ner till klienten där det deterministiskt kan rekonstrueras till DOM- element (Document Object Model). Progressiv förbättringsstrategi kan användas under konstruktionen för att binda dynamiska beteenden till annars statiska element.
JsonML kan också användas som den underliggande strukturen för att skapa intrikata mallar på klientsidan som kallas JBST (JsonML+Browser-Side Templates). Syntaktiskt ser JBST ut som JSP (JavaServer Pages) eller ASP.NET (Active Server Pages .NET) användarkontroller. Interaktiva exempel finns på webbplatsen jsonml.org.
Syntax
Konvertering från XML till JsonML är delvis reversibel. XML-namnområden hanteras genom att elementnamnet läggs till prefixet, t.ex. blir <myns:myElement/>
["myns:myElement"]
.
Exempel Transformation
JsonML tillåter att alla XML-dokument representeras unikt som en JSON-sträng. Syntaxen använder:
- JSON- matriser för att representera XML-element;
- JSON- objekt för att representera attribut;
- JSON- strängar för att representera textnoder.
JsonML-kodad | Original XML |
---|---|
[ "person" , { "created" : "2006-11-11T19:23" , "modified" : "2006-12-31T23:59" }, [ "firstName" , "Robert" ], [ "efternamn" , "Smith" ], [ "adress" , { "typ" : "hem" }, [ "street" , "12345 Sixth Ave" ], [ "stad" , "Anytown" ], [ "stat" , "CA" ], [ "postnummer" , "98765-4321" ] ] ]
|
<!-- XML-representation av en personpost --> <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> </ adress> </person>
|
En "vanlig" JSON-transformation ger en mer kompakt representation, men förlorar en del av dokumentets strukturella information, eftersom den inte definierar om ett nyckel-värdepar är ett attribut eller en nod:
{ "person" : { "address" : { "city" : "Anytown" , "postalCode" : "98765-4321" , "state" : "CA" , "street" : "12345 Sixth Ave" , "typ" : "home" }, "created" : "2006-11-11T19:23" , "firstName" : "Robert" , "lastName" : "Smith" , "modified" : "2006-12-31T23:59" } }
"Objektform" felbeteckning
I en JSON-användargruppstråd använde Douglas Crockford felaktigt termen "JsonML" för att beskriva två varianter: "arrayform" och "objektform". Detta var ett missbruk av termen JsonML som alltid har betydt vad Crockford kallade "arrayformen".
Jämförelse med liknande tekniker
XML/XSLT
XML och XSLT (Extensible Stylesheet Language Transformations) kan också producera mallar på klientsidan, och båda tillåter cachning av mallen separat från data. Många programmerare tycker dock att syntaxen för JBST är lättare att hantera på grund av dess förtrogenhet. JBST använder JavaScript naturligt i mallen, snarare än att kräva blandning av olika typer av kontrollspråk.
InnerHTML
Även om de till synes används för att utföra liknande uppgifter, är JsonML och innerHTML ganska olika. InnerHTML kräver all uppmärkning i en exakt form, vilket innebär att antingen servern renderar uppmärkningen eller så utför programmeraren dyra strängsammansättningar i JavaScript.
JsonML använder mall på klientsidan genom JBST, vilket innebär att HTML konverteras till en JavaScript-mall vid byggtid . Vid körning levereras data och DOM-element är resultatet. De resulterande DOM-elementen kan infogas eller ersätta ett befintligt element, vilket innerHTML inte enkelt kan göra utan att skapa överflödiga DOM-element. Återbindning kräver bara att ytterligare data begärs, vilket är mindre än helt utökad uppmärkning. Som ett resultat görs ofta stora prestandavinster, eftersom uppmärkningen begärs eller cachelagras separat från data.
HTML-meddelandemönster/mall på webbläsarsidan
För enkelhetens skull har innerHTML varit den föredragna metoden för HTML-meddelandemönsterstilen i Ajax. Verktyg som JsonFx syftar dock till att förenkla implementeringen av JsonML och JBST samtidigt som de tillhandahåller ett komplett Ajax-mallmönster på webbläsaren.
externa länkar
- JsonML.org
- IBM developerWorks-artikel
- Java JSONML implementering - skriven av Douglas Crockford
- JsonFx.NET - C#/.NET JBST Framework
- C++ JDX XPath 2.0 för XML, JSON och JsonML