JsonML - JsonML
| İnternet medya türü |
application/jsonml+json (gayri resmi) |
|---|---|
| Biçim türü | İşaretleme dili ve Web şablon sistemi |
| Genişletilmiş | XML , JSON ve JavaScript |
JsonML , JSON İşaretleme Dili , XML (Genişletilebilir İşaretleme Dili) ve JSON (JavaScript Nesne Gösterimi) arasında eşlemek için kullanılan hafif bir işaretleme dilidir . Web tarayıcısı gibi JavaScript ortamlarında kullanım kolaylığı için bir XML belgesini veya parçasını bir JSON veri yapısına dönüştürür ve XML ayrıştırıcısının ek yükü olmadan XML verilerinin işlenmesine izin verir.
JsonML, Ajax (Eşzamansız JavaScript ve XML) web uygulamalarında en yüksek uygulanabilirliğe sahiptir . XHTML'yi (Genişletilebilir Köprü Metni İşaretleme Dili) , DOM (Belge Nesne Modeli) öğelerine deterministik olarak yeniden oluşturulabileceği istemciye taşımak için kullanılır . Aşamalı geliştirme stratejisi, inşaat sırasında dinamik davranışları aksi halde statik öğelere bağlamak için kullanılabilir.
JsonML, JBST (JsonML+Tarayıcı Tarafı Şablonları) adı verilen karmaşık istemci tarafı şablonları oluşturmak için temel yapı olarak da kullanılabilir. Sözdizimsel olarak JBST, JSP (JavaServer Pages) veya ASP.NET (Active Server Pages .NET) kullanıcı kontrollerine benzer. Etkileşimli örnekler jsonml.org web sitesinde mevcuttur.
Sözdizimi
XML'den JsonML'ye dönüştürme kısmen tersine çevrilebilir. XML Ad Alanları , öğe adının başına ad alanı öneki eklenerek işlenir, örneğin, <myns:myElement/>olur ["myns:myElement"].
Örnek Dönüşüm
JsonML, herhangi bir XML belgesinin benzersiz bir şekilde bir JSON dizesi olarak temsil edilmesini sağlar. Sözdizimi şunları kullanır:
- XML öğelerini temsil edecek JSON dizileri ;
- Nitelikleri temsil edecek JSON nesneleri ;
- Metin düğümlerini temsil edecek JSON dizeleri .
| JsonML kodlu | Orijinal 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>
|
"Normal" bir JSON dönüşümü, daha kompakt bir temsil üretir, ancak bir anahtar/değer çiftinin bir öznitelik mi yoksa bir düğüm mü olduğunu tanımlamadığından, belge yapısal bilgilerinin bir kısmını kaybeder:
{"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"
}}
"Nesne Formu" Yanlış Adlandırma
Bir JSON kullanıcı grubu iş parçacığında, Douglas Crockford iki değişkeni tanımlamak için "JsonML" terimini yanlış kullandı: "dizi formu" ve "nesne formu". Bu, her zaman Crockford'un "dizi formu" olarak adlandırdığı şey anlamına gelen JsonML teriminin yanlış kullanımıydı.
Benzer teknolojilerle karşılaştırma
XML/XSLT
XML ve XSLT (Genişletilebilir Stil Sayfası Dil Dönüşümleri) de istemci tarafı şablonlama üretebilir ve her ikisi de şablonun verilerden ayrı olarak önbelleğe alınmasına izin verir. Ancak birçok programcı, aşinalığı nedeniyle JBST'nin sözdizimini yönetmeyi daha kolay bulur. JBST , farklı türde kontrol dillerinin karıştırılmasını gerektirmek yerine şablonda yerel olarak JavaScript kullanır .
InnerHTML
Görünüşe göre benzer görevleri gerçekleştirmek için kullanılsa da, JsonML ve innerHTML oldukça farklıdır. InnerHTML, tüm biçimlendirmeyi kesin bir biçimde gerektirir; bu, sunucunun biçimlendirmeyi oluşturduğu veya programcının JavaScript'te pahalı dize birleştirmeleri gerçekleştirdiği anlamına gelir .
JsonML, JBST aracılığıyla istemci tarafı şablonlamayı kullanır; bu, HTML'nin oluşturma zamanında bir JavaScript şablonuna dönüştürüldüğü anlamına gelir . At çalışma zamanında , veri verilir ve DOM unsurları sonucudur. Ortaya çıkan DOM öğeleri, fazladan DOM öğeleri oluşturmadan innerHTML'nin kolayca yapamayacağı mevcut bir öğeyi eklenebilir veya değiştirebilir. Yeniden bağlama, yalnızca tamamen genişletilmiş işaretlemeden daha küçük olan ek verilerin istenmesini gerektirir. Sonuç olarak, biçimlendirme verilerden ayrı olarak istendiği veya önbelleğe alındığı için genellikle büyük performans kazanımları elde edilir .
HTML mesaj kalıbı/Tarayıcı tarafı şablonlama
Basitlik açısından, innerHTML, Ajax'ın HTML-Mesaj desen stili için tercih edilen yöntem olmuştur. Bununla birlikte, JsonFx gibi araçlar, JsonML ve JBST uygulamasını basitleştirmeyi amaçlarken, yine de tam bir tarayıcı tarafı şablonlama Ajax modeli sağlar.
Referanslar
Dış bağlantılar
- JsonML.org
- IBM DeveloperWorks Makalesi
- Java JSONML uygulaması - Douglas Crockford tarafından yazılmıştır
- JsonFx.NET - C#/.NET JBST Çerçevesi
- XML, JSON ve JsonML için C++ JDX XPath 2.0