XML'nin S-ifadeleri (-ish) gösterimine göre avantajları nelerdir?


11

XML ve S-ifadeleri (-ish) notasyonu hakkında bir soru sormak istiyorum. S ifadeleri oldukça eskidir; onlar da gerçekten basit. Anlamda eşit, sözdiziminde farklı iki formu düşünebiliriz:

( Polonya wikipedia'dan alınan xml kodu )

<?xml version="1.0" encoding="UTF-8"?>
<ksiazka-telefoniczna kategoria="bohaterowie książek">
 <!-- komentarz -->
  <osoba charakter="dobry">
    <imie>Ambroży</imie>
    <nazwisko>Kleks</nazwisko>
    <telefon>123-456-789</telefon>
  </osoba>
  <osoba charakter="zły">
    <imie>Alojzy</imie>
    <nazwisko>Bąbel</nazwisko>
    <telefon/>
  </osoba>
</ksiazka-telefoniczna>

S-İfade (-ish) sürümü:

(:version "1.0" :encoding "utf-8")
(ksiazka-telefoniczna :category "bohaterowie książek"
  ; komentarz(a comment)
  (osoba :charakter "dobry"
    (imie Ambroży)
    (nazwisko Kleks)
    (telefon 123-456-789))
  (osoba :charakter "zły"
    (imie Alojzy)
    (nazwisko Bąbel)
    (telefon)))

S-İfade versiyonu çok daha özlü. Basit liste gösterimlerini kullanarak fazlalıktan kaçınırız, ancak yine de sahip olmak istediğimiz şeyleri (örneğin özellikler) içerecek şekilde sözdizimini tanımlayabiliriz. Tabii ki, bu sadece bir örnektir ve gerçek standart daha iyi veya daha basit olabilirdi; ancak ayrıştırılması daha kısa ve kolaydır. XML neden kazandı?



5
Düşürücülere: soruya katılmıyorsanız aşağı düşürmeyin, ancak kalitesiz olduğunu düşünüyorsanız (ve sonra kaliteyi artırmak için değişiklikler önerin). @RobertHarvey Bunun bir cevap olduğunu düşünüyorsanız, lütfen yorum bırakmak yerine sorumu yanıtlayın.
MatthewRock

1
Aşağı oy düğmesinin üzerindeki ipucu, "bu soru herhangi bir araştırma çabası göstermiyor" ifadesini içerir.
Robert Harvey

1
Bunun bir tartışma forumu olmadığını hatırlamaya çalışın. Gerçek sorunun cevapları vardır ve topluluk üyelerinin görüş değil, cevap vermeleri beklenir.
Robert Harvey

1
XML için fazlalık bağımsız değişkenleri (açılış köşeli ayraç adıyla kapatma köşeli parantezlere sahip olmak gibi) S ifadeleriyle kolayca taklit edilebilir. Basitçe yazın (para "This is a paragraph " (footnote "(better than the one under there)" "." /footnote) /para).
Andrew

Yanıtlar:


13

XML tasarımcılarının S-ifadelerine aşina olduklarını biliyoruz, çünkü XML SGML'ye dayanmaktadır ve SGML, S-ifade sözdizimini (ve gömülü kodlama dili olarak şemayı) kullanan bir stil sayfası diline (DSSSL) sahiptir.

Yine de XML kullanım durumları nedeniyle S-ifadelerinden farklı bir sözdizimi seçtiler. XML başlangıçta elle oluşturulan ve karışık içerik (meta veri içeren öğelerle iç içe metin) içeren hem makine tarafından oluşturulan yapılandırılmış verileri hem de HTML gibi biçimlendirme dillerini desteklemek üzere tasarlanmıştır.

fazlalık

İşaretleme metin belgeleri genellikle taramadan daha uzundur. Bir görürseniz )ve yapının başlangıcını göremezseniz, oldukça kaybolursunuz; henüz biten bir bölüm veya kenar çubuğu olup olmadığını bilmiyorsunuz. XML'deki son etiketlerdeki tagname'i tekrarlamanın fazlalığı, </sidebar>bunu insan yazar için çok daha kolay hale getirir. Ayrıca daha sağlam hale getirir: bir bitiş etiketini yanlışlıkla silerseniz, genellikle hangi bitiş etiketinin eksik olduğunu çıkarabilirsiniz.

SGML (XML'in öncüsü), bitiş etiketini isteğe bağlı olarak tek bir karaktere kısaltmanıza izin verdi, ancak bu özellik basitlik için XML dışında bırakıldı.

Kısacası, XML, tasarım tarafından daha ayrıntılıdır, çünkü insan tarafından düzenlenebilir belgeyi desteklemek için tasarlanmıştır. Bugün XML çok çeşitli amaçlar için, bu yedekliliğin gerekli olmadığı saf makine-makine iletişimi için de kullanılmaktadır.

Karışık içerik

Önerilen sözdiziminiz karışık içerikleri çok iyi desteklemiyor. HTML'de bu örneği ele alalım:

<p>Hi! <a href="example.com">Click here</a>!</p>

Sözdiziminizde bunu nasıl ifade edersiniz? Nitelikler ve metin içeriği arasında ayrım yapmak için bir tür ek sınırlayıcıya ihtiyacınız olacaktır. Aniden artık o kadar özlü değil.

Özel karakterler

Köşeli parantezler sıradan metinde parantez ve iki nokta üst üste göre daha nadirdir.

uygunluk

HTML, XML'in tasarlandığı sırada zaten çok başarılıydı ve benzer bir sözdizimi seçmek mantıklıydı.

XML neden kazandı?

S-ifadeleri asla XML'e alternatif olmadı. XML spesifikasyonu açılı ayraçlardan çok daha fazlasıdır; Öğeler ve öznitelikler ve karma içerik, çıkış, karakter kodlama, DTD-sözdizimi ve doğrulama vb. İçin bir sözdizimi tanımlar. S ifadeleri için benzer bir şey yoktu. Elbette, burada önerdiğiniz gibi benzer bir standart tanımlayabilirsiniz, ancak o zaman kimse bunu yapmamıştı. XML W3C tarafından kutsanmıştır ve bu nedenle büyük oyuncular tarafından benimsenmiştir ve veri alışverişi için defacto standardı haline gelmiştir.


3
Onun örneğinde, özellikler için iki nokta üst üste işareti kullanılmıyor mu? Örneğin. (p Merhaba! (a: href "example.com" Buraya tıklayın)!)? (ya da cevabınız gönderildikten sonra bunu düzenledi mi?)
Headcrab

Her ne kadar (mükemmel) cevabınızdan başka bir şey almasa da, sağ aklında kim manuel olarak XML belgeleri oluşturur?
Jared Smith

Hey Jacques, bu mükemmel cevap için teşekkürler! Headcrab ile karışık içeriğin sorun olmadığını kabul ediyorum. Her ne kadar XML bazen elle manuel olarak okunuyor / yazılıyor sanırım, ben Jared ile aynı fikirde.
MatthewRock

@Headcrab: Gerçek bir spesifikasyon olmadığından, sadece varsayımsal bir örnek olduğundan söylemek zor. Ama bana öyle geliyor ki, metni alıntılanan bir dizeden ziyade sembol olarak temsil etmek boşlukla ilgili belirsizliğe yol açacaktır. S ifadeleri AFAIK atomları arasında önemli boşlukları desteklemez, ancak <PRE>HTML'deki öğeyi desteklemek için buna ihtiyacınız vardır . Bu yüzden alıntıların gerekli olacağını varsaydım.
JacquesB

2
Gerçekten de XML, tüm bu çan ve ıslıklarla ve o zamanki s ifadelerini kazanmasına yardımcı olan tanıdık HTML benzeri sözdizimiyle oluşturulmuş gibi görünüyor. Birçok geliştirici, kullanım durumlarında, tüm bu özelliklerin makineden makineye iletişim için gerçekten gerekli olmadığına karar verdiğinde, JSON şeklinde farklı bir hafif alternatif vardı.
kamilk

9

Şahsen, XML ile ilgili en iyi kısmın sözdizimi yerine iyi tanımlanmış şema özellikleri olduğunu düşünüyorum. Şema mekanizması, kullanıcıların geçerli bir belge olarak gördüklerini paylaşmak için belge biçimlerini yayınlamalarına olanak tanır. Otomatik doğrulayıcılar da vardır. Ayrıca, bir kullanıcı tarafından oluşturulan türler ve şemalar diğer kullanıcılar tarafından genişletilebilir.

Bildiğim kadarıyla kimse S-ifadesi için genel amaçlı bir şema mekanizmasını standardize etme çabasının yakınında, LISP dilinin kendisi (OP'nin sorusundaki numunenin kullanmadığı) dışında hiçbir şey yapmadı.


1
XML'in ayrıntı düzeyini beğenmeme rağmen, +1 buna değer yapan şema özelliklerinden bahsettiği için. :-)
user949300


1

XML "S-expression-ish" bir şey üzerinde seçmek iki nedeni:

İyi tanımlanmış bir sözdizimsel ve anlambilimsel model

XML sadece bir düğüm ağacı değil , farklı sözdizimsel temsili ve farklı davranışları olan kategorize edilmiş bir düğüm ağacıdır . Örneğin, belirli bir ada sahip bir öznitelik, belirli bir düğüm için yalnızca bir kez, alt düğümler birden çok kez görünebilir.

Böyle bir modeli genel S ifadelerinin üstünde tanımlayabilirsiniz . Örnekleriniz, nitelikleri ve alt öğeleri kategorilere ayırmak için bir şema gösterir. Metin, yorumlar ve işleme talimatları için anlambilim eklediğinizde XML ile izomorfik bir şey elde edersiniz.

İşleme

Standart sözdizimsel ve semantik modelden araçlar oluşturabilirsiniz - ve birçok insan var. Her ortak dil / platform için bir çeşit XML ayrıştırıcı / serileştirici, XPath ve XSLT işlemci bulabilirsiniz. Ve her platformda hepsinin aynı şekilde davranacağını biliyorsunuz.


Ve göz önünde bulundurmanız gereken birkaç şey daha var:

Büyük şemada, XML o kadar ayrıntılı değil

Örneğinizde, aslında neyi ortadan kaldırdınız? Ben okurken, sen:

  • Her ifade için kapanış etiketi kaldırıldı.
  • >Normalde açılış etiketini çocuklarından ayıracak olanı ortadan kaldırdı .
  • Alt öğe bir öznitelik olduğunu belirtmek için =öznitelik adını ve değerini a ile :değiştirir; tasarruf yok.

XML'in iç ve dış temsillerinin çok farklı olduğunu bilmek de önemlidir. Dahili olarak, bir XML ağacı çok kompakttır. Ve çeşitli unsurlar zaten kategorize edildiğinden, manipüle etmek çok etkilidir. Dışarıdan, evet, tüm bu kapanış etiketlerini alıyorsunuz, ancak iyi sıkıştırıyorlar.

Asıl mesele "ayrıntı" mı?

Bence asıl soru XML'in "ayrıntılı" olup olmadığı, belirli bir amaç için gerekenden daha anlamlı olup olmadığıdır. Bazı örnekler:

  • Bir öğenin, alt öğelerden anlamsal olarak farklı nitelikleri tutma yeteneği. Öğenin içeriğinin yerel veri türünü tanımlama gibi bant dışı bilgiler için kullanışlıdır. Ama belki buna ihtiyacınız yoktur, çünkü harici özellikleriniz içeriği tanımlar.
  • Bir öğenin hem alt öğeleri hem de metni tutabileceği karışık içerik (yorumlar ve işleme talimatları). İşaretleme için kullanışlıdır, ancak basit veri sunumu için olmayabilir.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.