JsonML — JsonML

Język znaczników JSON
Rodzaj mediów internetowych
application/jsonml+json (nieoficjalny)
Rodzaj formatu Język znaczników i system szablonów internetowych
Rozszerzony z XML , JSON i JavaScript

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

JsonML ma największe zastosowanie w aplikacjach internetowych Ajax (Asynchronous 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ć zachowania dynamiczne 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). Składniowo 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 jsonml.org.

Składnia

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

Przykład transformacji

JsonML umożliwia unikatową reprezentację dowolnego dokumentu XML jako ciągu JSON. Składnia wykorzystuje:

  • Tablice JSON do reprezentowania elementów XML;
  • obiekty JSON do reprezentowania atrybutów;
  • Ciągi JSON reprezentujące węzły tekstowe.
Kodowanie JsonML Oryginalny 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>

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

{"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"
}}

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ą tablicową”.

Porównanie do podobnych technologii

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. Wielu programistów uważa jednak, że składnia JBST jest łatwiejsza w zarządzaniu ze względu na jej znajomość. JBST używa natywnie JavaScript 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 konkatenacje ciągó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 dostarczane są dane, a wynikiem są elementy DOM. Wynikowe 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 tylko żą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ą żądane lub buforowane oddzielnie od danych.

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

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

Bibliografia

Zewnętrzne linki