JsonML

Język znaczników JSON
Rodzaj mediów internetowych
aplikacja/jsonml+json (nieoficjalna)
Typ formatu Język znaczników i system szablonów sieciowych
Przedłużony od XML , JSON i JavaScript

JsonML , JSON Markup Language to lekki język znaczników używany do mapowania między XML (Extensible Markup Language) a JSON (JavaScript Object Notation). Konwertuje dokument XML lub fragment na strukturę danych JSON w celu ułatwienia użycia w JavaScript , takich jak przeglądarka internetowa , umożliwiając manipulowanie danymi XML bez narzutu na parser XML.

JsonML ma największe zastosowanie w aplikacjach internetowych Ajax (asynchroniczny JavaScript i XML). Służy do transportu XHTML (eXtensible HyperText Markup Language) do klienta, gdzie można go deterministycznie zrekonstruować na elementy DOM (Document Object Model). Podczas budowy można zastosować strategię progresywnego ulepszania , aby powiązać dynamiczne zachowania z elementami statycznymi.

JsonML może być również używany jako podstawowa struktura do tworzenia skomplikowanych szablonów po stronie klienta o nazwie JBST (JsonML+Browser-Side Templates). Syntaktycznie JBST wygląda jak kontrolki użytkownika JSP (JavaServer Pages) lub ASP.NET (Active Server Pages .NET). Interaktywne przykłady są dostępne na stronie internetowej jsonml.org.

Składnia

Konwersja z XML na JsonML jest częściowo odwracalna. Przestrzenie nazw XML są obsługiwane przez poprzedzenie nazwy elementu prefiksem przestrzeni nazw, np. <myns:myElement/> staje się ["myns:myElement"] .

Przykładowa transformacja

JsonML umożliwia unikalną reprezentację dowolnego dokumentu XML jako ciągu JSON. Składnia używa:

  • tablice JSON do reprezentacji elementów XML;
  • obiekty JSON do reprezentowania atrybutów;
  • Ciągi JSON reprezentujące węzły tekstowe.
zakodowane w JsonML Oryginalny plik XML

  
   
   
   
   
     [  "osoba"  ,  {  "utworzono"  :  "2006-11-11T19:23"  ,  "zmodyfikowano"  :  "2006-12-31T23:59"  },  [  "imię"  ,  "Robert"  ],  [  "nazwisko"  ,  "Smith"  ],  [  "adres"  ,  {  "typ"  :  "dom"  },  [  "ulica"  ,  
     
     
     
  
 "12345 Sixth Ave"  ],  [  "city"  ,  "Dowolne miasto"  ],  [  "stan"  ,  "CA"  ],  [  "postalCode"  ,  "98765-4321"  ]  ]  ] 

  
    
    
     
        
        
         <!-- Reprezentacja XML rekordu osoby -->  <osoba  utworzona =  "2006-11-11T19:23"  zmodyfikowana =  "2006-12-31T23:59"  > <imię>   Robert <   /imię  >  <nazwisko>  Kowalski  </lastName>  <address  type=  "home"  >  <ulica>  12345 Sixth Ave  </street>  <city>  Dowolne miasto  </city>  <stan>  CA  </stan> 
        
    
 <kod pocztowy>  98765-4321  </kod pocztowy>  </adres>  </osoba> 

„Zwykła” transformacja JSON tworzy bardziej zwartą reprezentację, ale traci część informacji strukturalnych dokumentu, ponieważ nie określa, czy para klucz-wartość jest atrybutem, czy węzłem:

 
     
         
         
         
         
         
    
     
     {  "person"  :  {  "address"  :  {  "city"  :  "Dowolne miasto"  ,  "postalCode"  :  "98765-4321"  ,  "stan"  :  "CA"  ,  "ulica"  :  "12345 Sixth Ave"  ,  "typ"  :  "dom"  },  "utworzono"  :  "2006-11-11T19:23"  ,  "imię"  
     
     
 :  "Robert"  ,  "nazwisko"  :  "Kowalski"  ,  "zmodyfikowany"  :  "2006-12-31T23:59"  }} 

Błędna nazwa „forma obiektu”.

W wątku grupy użytkowników JSON Douglas Crockford błędnie użył terminu „JsonML” do opisania dwóch wariantów: „formy tablicy” i „formy obiektu”. Było to niewłaściwe użycie terminu JsonML, który zawsze oznaczał to, co Crockford nazywał „formą tablicy”.

Porównanie z podobnymi technologiami

XML/XSLT

XML i XSLT (Extensible Stylesheet Language Transformations) mogą również tworzyć szablony po stronie klienta i oba umożliwiają buforowanie szablonu oddzielnie od danych. Jednak wielu programistów uważa, że ​​składnia JBST jest łatwiejsza w zarządzaniu ze względu na jej znajomość. JBST używa JavaScript natywnie w szablonie, zamiast wymagać mieszania różnych typów języka sterującego.

Wewnętrzny HTML

Choć pozornie używane do wykonywania podobnych zadań, JsonML i innerHTML są zupełnie inne. InnerHTML wymaga wszystkich znaczników w dokładnej formie, co oznacza, że ​​albo serwer renderuje znaczniki, albo programista wykonuje kosztowne łączenie łańcuchów w JavaScript.

JsonML używa szablonów po stronie klienta za pośrednictwem JBST, co oznacza, że ​​HTML jest konwertowany na szablon JavaScript w czasie kompilacji . W czasie wykonywania dane są dostarczane, a elementy DOM są wynikiem. Powstałe elementy DOM można wstawić lub zastąpić istniejący element, czego innerHTML nie może łatwo zrobić bez tworzenia nadmiarowych elementów DOM. Ponowne wiązanie wymaga jedynie zażądania dodatkowych danych, które są mniejsze niż w pełni rozwinięte znaczniki. W rezultacie często uzyskuje się duży wzrost wydajności, ponieważ znaczniki są wymagane lub buforowane niezależnie od danych.

Wzorzec wiadomości HTML/Szablony po stronie przeglądarki

Dla uproszczenia, innerHTML był preferowaną metodą dla stylu wzorca HTML-Message w Ajaksie. Jednak narzędzia takie jak JsonFx mają na celu uproszczenie implementacji JsonML i JBST, jednocześnie zapewniając pełny wzorzec szablonów Ajax po stronie przeglądarki.

Linki zewnętrzne