Які переваги XML над S-виразами (-ish) позначеннями?


11

Я хотів би задати питання щодо позначень XML та S-виразів (-ish). S-вирази досить старі; вони також дійсно прості. Ми могли б розглянути дві форми, які за рівнем значень різні за синтаксисом:

(xml-код, узятий з польської вікіпедії )

<?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-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)))

Версія S-Expression набагато стисліша. Ми уникаємо надмірності, використовуючи прості позначення списку, але ми все ще можемо визначити синтаксис, щоб включити речі, які ми хочемо мати (наприклад, властивості). Звичайно, це лише приклад, і фактичний стандарт міг бути кращим або просто іншим; проте коротше і простіше розібратися. Чому XML виграв?



5
Для низових користувачів: не подзвонюйте, якщо ви не згодні з питанням, але якщо ви думаєте, що це низької якості (і тоді запропонуйте зміни для поліпшення якості). @RobertHarvey Якщо ви вважаєте, що це відповідь, будь ласка, дайте відповідь на моє запитання, а не кидати коментар.
MatthewRock

1
Підказка над кнопкою знизу містить фразу "це питання не показує жодних зусиль для дослідження".
Роберт Харві

1
Спробуйте пам’ятати, що це не дискусійний форум. На справжнє запитання є відповіді, і від членів громади очікується відповідь, а не думка.
Роберт Харві

1
Аргументи надмірності для XML (як, наприклад, закриваючі дужки з назвою відкриваючої дужки) можна легко імітувати S-виразами. Просто напишіть (para "This is a paragraph " (footnote "(better than the one under there)" "." /footnote) /para).
Андрій

Відповіді:


13

Ми знаємо, що дизайнери XML були знайомі з S-виразами, оскільки XML заснований на SGML, а SGML має мову аркушів стилів, DSSSL, яка використовує синтаксис S-виразів (і схему як вбудовану мову сценарію).

Проте вони вибрали інший синтаксис, ніж S-вирази, через випадки використання для XML. Спочатку XML був розроблений для підтримки структурованих на машині структурних даних та мов розмітки, таких як HTML, які є автором вручну та містять змішаний вміст (текст, переплетений з елементами з метаданими).

Надмірність

Текстові документи для розмітки часто довші, ніж екранні. Якщо ви бачите a )і не бачите початку структури, ви сильно втрачаєте; ви не знаєте, чи це була глава чи бічна панель, що щойно закінчилася. Надмірність повторення імені тегів у кінцевих тегах у XML, як-от, </sidebar>значно полегшує людського письменника. Це також робить його більш надійним: якщо ви випадково видалили кінцевий тег, ви часто можете зробити висновок, який кінцевий тег відсутній.

SGML (попередник XML) дозволив вам необов'язково скоротити кінцевий тег до одного символу, але ця функція залишилася поза XML для простоти.

Отже, коротше, XML є більш дослідним за конструкцією, оскільки він призначений для підтримки редагованого людьми документа. Сьогодні XML використовується для найрізноманітніших цілей, також для чистого зв'язку машина-машина, де ця надмірність не потрібна.

Змішаний контент

Запропонований вами синтаксис не дуже добре підтримує змішаний вміст. Візьміть цей приклад у HTML:

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

Як би ви виразили це у своєму синтаксисі? Вам знадобиться якийсь додатковий роздільник, щоб розрізняти атрибути та текстовий вміст. Раптом це вже не так стисло.

Спеціальні символи

Кутові дужки у рідшому тексті набагато рідше, ніж у дужках та двокрапці.

Сумісність

У той час, коли розроблявся XML, HTML був дуже успішним, і було доцільно вибрати подібний синтаксис.

Чому XML виграв?

S-вирази ніколи не були альтернативою XML. Специфікація XML набагато більше, ніж кутові дужки; Він визначає синтаксис елементів та атрибутів та змішаного контенту, епізодів, кодування символів, DTD-синтаксису та валідації тощо. Нічого подібного не існувало для s-виразів. Звичайно, ви можете визначити подібний стандарт, як ви пропонуєте тут, але цього ще ніхто не робив. XML отримав благословення від W3C і тому був прийнятий основними гравцями і став стандартом дефакто для обміну даними.


3
У його прикладі чи не використовуються колони для атрибутів? E. g. (p Привіт! (a: href "example.com" Натисніть тут)!)? (чи він щойно відредагував це після опублікування вашої відповіді?)
Headcrab

Хоча це не відбирає нічого від вашої (чудової) відповіді, хто з розуму вручну створює XML документи?
Джаред Сміт

Гей Жак, дякую за чудову відповідь! Я згоден з Headcrab, що змішаний вміст не є проблемою. Я також погоджуюся з Джаредом, хоча, мабуть, XML читається / пишеться вручну іноді в будь-якому випадку.
MatthewRock

@Headcrab: Важко сказати, оскільки немає фактичних специфікацій, а лише гіпотетичний приклад. Але мені здається, що подання тексту як символів, а не цитується рядок призведе до неоднозначностей з пробілом. S-вирази не підтримують значного пробілу між атомами AFAIK, але вам це потрібно для підтримки, наприклад, <PRE>елемента в HTML. Тож я припускав, що цитати будуть потрібні.
ЖакБ

2
Тож насправді схоже на те, що XML створений із усіма цими дзвінками та знайомим синтаксисом у вигляді HTML, який допоміг йому перемогти s-вирази на той час. На той час, коли багато розробників вирішили, що у випадках їх використання всі ці функції насправді не потрібні для зв'язку машина-машина, існувала інша легка альтернатива у формі JSON.
kamilk

9

Особисто я думаю, що найкраща частина XML - це чітко визначені можливості схеми, а не її синтаксис. Механізм схеми дозволяє користувачам публікувати свій формат документа, щоб поділитися тим, що вони вважають дійсним документом. Також є автоматизовані валідатори. Крім того, типи та схеми, створені одним користувачем, можуть бути розширені іншими користувачами.

Наскільки мені відомо, ніхто не доклав жодних зусиль щодо стандартизації механізму схеми загального призначення для s-вираження, за винятком самої мови LISP (яку зразок у питанні ОП не використовує).


1
Хоча мені не подобається багатослівність XML, +1 за згадування можливостей схеми, які майже цього не варті. :-)
user949300


1

Ось дві причини, через які я обрав би XML над чимось "S-виразом-ish":

Добре визначена синтаксична та семантична модель

XML - це не просто дерево вузлів, а дерево категоризованих вузлів, які мають різне синтаксичне подання та різну поведінку. Наприклад, атрибут із заданим іменем може з’являтися лише один раз для даного вузла, тоді як дочірні вузли можуть з’являтися кілька разів.

Ви можете визначити таку модель поверх загальних S-виразів. Ваші приклади показують схему категоризації атрибутів та дочірніх елементів. Додайте в семантику текст, коментарі та інструкції з обробки, і у вас вийде щось ізоморфне з XML.

Інструментальне обладнання

Зі стандартної синтаксичної та семантичної моделі ви можете побудувати інструменти - і людей багато. Ви можете знайти певну форму XML-аналізатора / серіалізатора, XPath та XSLT-процесора для кожної загальної мови / платформи. І ви знаєте, що всі вони будуть поводитись однаково на кожній платформі.


І ось ще декілька речей, які слід врахувати:

У грандіозній схемі XML не є таким багатослівним

У вашому прикладі, що ви фактично усунули? Як я читав, ви:

  • Усунув завершальний тег кожного виразу.
  • Видалено те, >що зазвичай відокремлює вступний тег від його дітей.
  • Замінено тим, =що відокремлює ім’я атрибута та значення а, :щоб вказати, що дитина є атрибутом; заощаджень немає.

Я думаю, що також важливо визнати, що внутрішні та зовнішні представлення XML дуже різні. Внутрішнє дерево XML дуже компактне. А оскільки різні елементи вже класифіковані, маніпулювати дуже ефективно. Зовні добре, так, ви отримуєте всі ці завершальні теги, але вони добре стискаються.

Чи справжнє питання "багатослів'я"?

Я думаю, що справжнє питання полягає не в тому, чи XML є "багатослівним", а чи є більш виразним, ніж це потрібно для заданої мети. Деякі приклади:

  • Здатність елемента зберігати атрибути, які семантично відрізняються від дочірніх елементів. Корисно для позадіапазонної інформації, наприклад опису нативного типу даних, вмісту елемента. Але, можливо, вам це не потрібно, тому що ваша зовнішня специфіка визначає вміст.
  • Змішаний вміст, в якому елемент може містити як дочірні елементи, так і текст (а також коментарі та інструкції з обробки). Корисно для розмітки, але, можливо, не для простого представлення даних.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.