JsonML - JsonML

Langage de balisage JSON
Type de média Internet
application/jsonml+json (non officiel)
Type de format Langage de balisage et système de modèles Web
Prolongé de XML , JSON et JavaScript

JsonML , le langage de balisage JSON est un langage de balisage léger utilisé pour mapper entre XML (Extensible Markup Language) et JSON (JavaScript Object Notation). Il convertit un document ou un fragment XML en une structure de données JSON pour une utilisation facile dans des environnements JavaScript tels qu'un navigateur Web , permettant la manipulation de données XML sans la surcharge d'un analyseur XML.

JsonML a la plus grande applicabilité dans les applications Web Ajax (Asynchronous JavaScript and XML). Il est utilisé pour transporter XHTML (eXtensible HyperText Markup Language) jusqu'au client où il peut être reconstruit de manière déterministe en éléments DOM (Document Object Model). Une stratégie d' amélioration progressive peut être utilisée pendant la construction pour lier des comportements dynamiques à des éléments par ailleurs statiques.

JsonML peut également être utilisé comme structure sous-jacente pour créer des modèles côté client complexes appelés JBST (JsonML+Browser-Side Templates). D'un point de vue syntaxique, JBST ressemble aux contrôles utilisateur JSP (JavaServer Pages) ou ASP.NET (Active Server Pages .NET). Des exemples interactifs sont disponibles sur le site Web jsonml.org.

Syntaxe

La conversion de XML en JsonML est partiellement réversible. Les espaces de noms XML sont gérés en préfixant le nom de l'élément avec le préfixe de l'espace de noms, par exemple, <myns:myElement/>devient ["myns:myElement"].

Exemple de transformation

JsonML permet à tout document XML d'être représenté de manière unique sous la forme d'une chaîne JSON. La syntaxe utilise :

  • Tableaux JSON pour représenter les éléments XML ;
  • objets JSON pour représenter les attributs ;
  • JSON enfile pour représenter les nœuds de texte.
JsonML encodé XML d'origine
["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>

Une transformation JSON « normale » produit une représentation plus compacte, mais perd une partie des informations structurelles du document, en ce sens qu'elle ne définit pas si une paire clé-valeur est un attribut ou un nœud :

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

Nom impropre de « forme d'objet »

Dans un fil de discussion de groupe d'utilisateurs JSON, Douglas Crockford a utilisé à tort le terme « JsonML » pour décrire deux variantes : la « forme de tableau » et la « forme d'objet ». Il s'agissait d'une mauvaise utilisation du terme JsonML qui a toujours signifié ce que Crockford appelait la "forme de tableau".

Comparaison avec des technologies similaires

XML/XSLT

XML et XSLT (Extensible Stylesheet Language Transformations) peuvent également produire des modèles côté client, et tous deux permettent la mise en cache du modèle séparément des données. Cependant, de nombreux programmeurs trouvent que la syntaxe de JBST est plus facile à gérer en raison de sa familiarité. JBST utilise JavaScript nativement dans le modèle, plutôt que de nécessiter le mélange de différents types de langage de contrôle.

IntérieurHTML

Bien qu'en apparence utilisé pour effectuer des tâches similaires, JsonML et innerHTML sont tout à fait différents. InnerHTML requiert tout le balisage sous une forme exacte, ce qui signifie que soit le serveur rend le balisage, soit le programmeur effectue des concaténations de chaînes coûteuses en JavaScript.

JsonML utilise des modèles côté client via JBST, ce qui signifie que le code HTML est converti en modèle JavaScript au moment de la génération . Au moment de l'exécution , les données sont fournies et les éléments DOM sont le résultat. Les éléments DOM résultants peuvent être insérés ou remplacer un élément existant, ce que innerHTML ne peut pas facilement faire sans créer des éléments DOM en excès. La reliaison ne nécessite que la demande de données supplémentaires, qui sont plus petites que le balisage entièrement développé. En conséquence, des gains de performances importants sont souvent réalisés, car le balisage est demandé ou mis en cache séparément des données.

Modèle de message HTML/Modèle côté navigateur

Pour plus de simplicité, innerHTML a été la méthode préférée pour le style de modèle de message HTML d'Ajax. Cependant, des outils tels que JsonFx visent à simplifier l'implémentation de JsonML et JBST tout en fournissant un modèle Ajax de modélisation complet côté navigateur.

Les références

Liens externes