Chciałbym zadać pytanie dotyczące zapisu XML i S-wyrażeń (-ish). Wyrażenia S są dość stare; są również bardzo proste. Możemy rozważyć dwie formy, które są równe w znaczeniu, różne pod względem składni:
(kod xml pochodzi z polskiej wikipedii )
<?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>
Wersja S-Expression (-ish):
(: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)))
Wersja S-Expression jest znacznie bardziej zwięzła. Unikamy redundancji, używając prostych notacji listowych, ale wciąż możemy zdefiniować składnię, aby uwzględnić rzeczy, które chcemy mieć (np. Właściwości). Oczywiście jest to tylko przykład, a faktyczny standard mógłby być lepszy lub po prostu inny; jest jednak krótszy i łatwiejszy do przeanalizowania. Dlaczego wygrał XML?
(para "This is a paragraph " (footnote "(better than the one under there)" "." /footnote) /para)
.Odpowiedzi:
Wiemy, że projektanci XML znali wyrażenia S, ponieważ XML jest oparty na SGML, a SGML ma język arkuszy stylów, DSSSL, który wykorzystuje składnię S-wyrażeń (i schemat jako osadzony język skryptowy).
Niemniej jednak wybrali inną składnię niż wyrażenia S ze względu na przypadki użycia XML. XML został początkowo zaprojektowany do obsługi zarówno danych generowanych maszynowo, jak i języków znaczników, takich jak HTML, które są tworzone ręcznie i zawierają mieszaną treść (tekst przeplatany elementami z metadanymi).
Nadmiar
Znaczniki dokumentów tekstowych są często dłuższe niż ekran. Jeśli widzisz a
)
i nie widzisz początku struktury, jesteś całkiem zagubiony; nie wiesz, czy to był rozdział, czy pasek boczny, który właśnie się zakończył. Nadmiar powtarzania zmiennej w znacznikach końcowych w formacie XML</sidebar>
znacznie ułatwia pisarzowi. Dzięki temu jest bardziej niezawodny: jeśli przypadkowo usuniesz znacznik końcowy, często możesz wywnioskować, którego znacznika brakuje.SGML (poprzednik XML) pozwolił ci opcjonalnie skrócić znacznik końcowy do jednego znaku, ale dla uproszczenia tej funkcji pominięto XML.
Krótko mówiąc, XML jest z założenia bardziej szczegółowy, ponieważ został zaprojektowany do obsługi dokumentu edytowalnego przez człowieka. Obecnie XML jest wykorzystywany do wielu różnych celów, również do czystej komunikacji między maszynami, gdzie ta nadmiarowość nie jest potrzebna.
Mieszana treść
Sugerowana składnia nie obsługiwałaby bardzo dobrze zawartości mieszanej. Weź ten przykład w HTML:
Jak wyraziłbyś to w swojej składni? Potrzebujesz rozróżnienia między atrybutami a treścią tekstową. Nagle nie jest już tak zwięzłe.
Znaki specjalne
Nawiasy kątowe są znacznie rzadsze w zwykłym tekście niż w nawiasach i dwukropku.
Zgodność
HTML był już bardzo udany w czasie projektowania XML i sensowne było wybranie podobnej składni.
Dlaczego wygrał XML?
Wyrażenia S nigdy nie były alternatywą dla XML. Specyfikacja XML to znacznie więcej niż nawiasy kątowe; Definiuje składnię elementów i atrybutów oraz mieszaną zawartość, zmiany znaczenia, kodowanie znaków, składnię DTD i sprawdzanie poprawności i tak dalej. Nic podobnego nie istniało dla wyrażeń s. Oczywiście możesz zdefiniować podobny standard, jak tutaj proponujesz, ale nikt tego wtedy nie zrobił. XML został pobłogosławiony przez W3C i dlatego został przyjęty przez głównych graczy i stał się standardem defacto do wymiany danych.
źródło
<PRE>
Elementu w HTML. Więc założyłem, że potrzebne będą cytaty.Osobiście uważam, że najlepszą częścią XML jest dobrze zdefiniowane możliwości schematu, a nie jego składnia. Mechanizm schematu umożliwia użytkownikom opublikowanie formatu dokumentu w celu udostępnienia tego, co uważają za prawidłowy dokument. Istnieją również automatyczne weryfikatory. Ponadto typy i schematy utworzone przez jednego użytkownika mogą być rozszerzane przez innych użytkowników.
O ile wiem, nikt nie poczynił wysiłku w celu standaryzacji mechanizmu schematu ogólnego zastosowania dla ekspresji s, z wyjątkiem samego języka LISP (którego próbka w pytaniu OP nie używa).
źródło
Oto dwa powody, dla których wybrałbym XML zamiast czegoś „S-expression-ish”:
Dobrze zdefiniowany model składniowy i semantyczny
XML nie jest po prostu drzewem węzłów, ale drzewem skategoryzowanych węzłów, które mają różne reprezentacje składniowe i różne zachowanie. Na przykład atrybut o podanej nazwie może pojawić się tylko raz dla danego węzła, a węzły potomne mogą pojawić się wiele razy.
Można zdefiniować taki model na podstawie ogólnych wyrażeń S. Twoje przykłady pokazują schemat kategoryzacji atrybutów i elementów potomnych. Dodaj semantykę do tekstu, komentarzy i instrukcji przetwarzania, a będziesz mieć coś, co jest izomorficzne z XML.
Obróbka
Ze standardowego modelu składniowego i semantycznego możesz budować narzędzia - i wiele osób je ma. Możesz znaleźć jakąś formę parsera / serializatora XML, XPath i procesora XSLT dla każdego wspólnego języka / platformy. I wiesz, że wszyscy będą zachowywać się tak samo na każdej platformie.
A oto kilka innych rzeczy do rozważenia:
W wielkim schemacie XML nie jest taki szczegółowy
Co w twoim przykładzie wyeliminowałeś? Jak czytam, ty:
>
, co normalnie oddzielałoby znacznik otwierający od jego elementów potomnych.=
oddzielającą nazwę i wartość atrybutu na,:
aby wskazać, że dziecko jest atrybutem; bez oszczędności.Myślę, że ważne jest również, aby uznać, że wewnętrzne i zewnętrzne reprezentacje XML są bardzo różne. Drzewo XML jest wewnętrznie bardzo zwarte. Ponieważ różne elementy są już podzielone na kategorie, manipulowanie nimi jest bardzo skuteczne. Zewnętrznie, cóż, tak, wszystkie te znaczniki zamykające są dobrze kompresowane.
Czy „gadatliwość” jest prawdziwym problemem?
Myślę, że prawdziwym pytaniem nie jest to, czy XML jest „pełny”, ale czy jest on bardziej wyrazisty niż jest potrzebny do określonego celu. Kilka przykładów:
źródło