Якщо XML настільки поганий ... чому так багато людей використовують його? [зачинено]


37

Я розумію призначення XML, але завжди чую, як люди скаржаться на те, наскільки це BAD? Я насправді не розумію, що в цьому поганого? Зазвичай я чую, як терміни "роздутий" і "повільний" кидаються навколо.

Але я здогадуюсь, як програмісти, для чого ви в основному це використовуєте? А ви насправді вважаєте це "поганим" .... тому що якщо це так, дуже багато людей використовує його для транспортування даних ...


1
Ваша відповідь - у питанні. Люди все ще користуються ним, тому що люди користувалися ним, а варіанти (1) переписати весь код, який використовував його до JSON та YAML, або (2) висмоктати його і зробити дурну справу. Дуже багато людей досі продовжують цикли насильства. Це не доводить притаманну практиці цінність.
Парфянський розстріл

5
Спробуйте JSON для фактичного документа (сторінка man, Knuth, Hamlet тощо). Потім ви зрозумієте, чому XML є важливим. Це простір, де JSON смокче (продовжуйте, спробуйте). Використання будь-якого в дизайнерському просторі іншого викликає сумніви. Проблеми використання XML у просторі JSON - це, головним чином, багатослів’я та швидкість, тоді як проблеми використання JSON у просторі XML, як правило, включають портативність (спробуйте взаємодіяти з другом, який робив книгу в JSON, але власним чином), цілісністю та ін. проблеми інтерпретації, які потребують великих зусиль людини для виправлення. Використовуйте правильний інструмент для своєї роботи.
TextGeek

XML поганий лише тому, що багато людей зловживають ним за речі, які не були розроблені. Якщо вам не потрібно, щоб ваші дані були легко розширювані (тобто схемою користуються кілька сторін, які потребують взаємодії, а не централізовано диктується однією авторитетною стороною), і якщо ваші дані не є документом (тобто якщо DOM у вас була недостатня абстракція ваших даних), то XML не підходить для цих програм. Коли ваш проблемний домен підпадає під те, для чого призначений XML, нічого іншого не відповідає XML. JSON, YAML тощо погано підходять для простору, для якого XML дійсно призначений.
Лежати Райан

Відповіді:


90

Xml чудово підходить для того, чим він був розроблений - нейтральний платформенний протокол передачі даних з нейтральною платформою з деякими можливостями для забезпечення перевірки даних на низьких рівнях. Я сумніваюся, що кожен, хто використовує Xml таким чином, має справжню скаргу. Це найбільш простий формат дроту? Ні. Але є і гірші варіанти. Це так швидко, як читання власного бінарного формату? Ні. Але ваші ділові партнери можуть читати його в будь-якій стеці, яку вони використовують.

Проблема, однак, полягає в тому, що люди - особливо порода, відома як архітектори підприємств - злі і приймають добро і роблять їх поганими. Що стосується Xml, то на початку цього століття Xml вважався універсальним молотком для кожної ІТ-проблеми. Посипте невеликий дизайн комітетом, і ви зіткнетеся з деякими жахливими жахливими явищами, такими як SOAP та oXML . Жодного з них не варто бажати ворогам, ніколи не пам’ятайте про друзів чи колег.


15
+1 - кожен, хто коли-небудь мав справу з EDI, просто бажає, щоб XML був винайдений до того, як виник цей безлад.
Скотт Вітлок

12
+1 майже точно відповідає моїм думкам. Я лише додам, що для зберігання простих та простих даних, навіть якщо це ієрархічний (але не надто глибокий, що не поєднується ні з чим ), є певні формати, які працюють так само добре - особливо JSON та YAML. Останнє надзвичайно дивовижне щодо людської читабельності.

11
Перефразовуючи jwz: "Існує певний тип програміста, який розбере будь-яку проблему і скаже:" Я знаю, я буду використовувати XML ". Зараз у нього дві проблеми ".
Адам Кросленд

13
Скажіть, будь ласка, oXML розглядався як жарт, як Brainfuck, Whitespace чи LOLCODE.
dimimcha

9
@Shamim Hafiz, SOAP, безумовно, є одним з найгірших монументів, які коли-небудь розводили людство.
SK-логіка

24

XML - це лише інструмент, який пропонується у багатьох смаках та сферах використання. XML в деяких речах перевершує і смакує в інших. Я думаю, що одна з проблем полягає в тому, що люди бачили «корпоративний» XML, який непотрібний з просторами імен та лайном, розсіяним навколо (SOAP, хтось?). Трюк у розробці XML-форматів для людей - це додавання даних реального значення, не роблячи їх непосильним для читання.

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

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

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

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

Плюси XML

  • Охоплює безліч кращих справ, яких YAML та JSON не мають
  • Є чудові інструменти для розбору та перевірки XML у масиві різних платформ та мов
  • XML можна легко і потужно перетворити в інший формат (через такі речі, як XSLT)
  • Розумні XML-документи просто люди можуть читати та редагувати; не кажи мені JSON простіше, це не так :)
  • XML певною мірою самоописується, тобто безпосередньо містить інформацію про його структуру та значення (на відміну від більшості бінарних форматів)
  • Обробляє кодування
  • Whitespace agnostic, що полегшує використання крос-платформ
  • Порушення, якщо воно не сформоване (Забезпечує структурно правильність даних)
  • Це не SGML

Мінуси

  • Багатослівний
  • Розбирати не так швидко, як двійкові
  • Порушує, якщо він не добре сформований (збій програми)

Гарне використання

  • Файли конфігурації
  • Формати обміну даними
  • Версії пружні формати файлів
  • Зберігання документів у базах даних

Не настільки хороші вживання

  • Формати передачі даних
  • Серіалізація об'єктів
  • Зберігання реляційних даних у базах даних
  • Формат файлу для високопродуктивних сценаріїв вводу / виводу

13
Я сумніваюся, що "файли конфігурації" мають бути "належним чином". Це не дані, а інструкції.
daknøk

3
Я тут з @ daknøk - я не можу порахувати, скільки разів довелося витратити величезну кількість часу, щоб з'ясувати помилку конфігурації в наборах рядків довгим XML-файлом, який визначає введення залежності, що базувалося на одному невеликому друку в атрибут XML
Gjallar

3
Якщо невдалі дані виходять із програми, то це чи є дані, які мають проблеми?
Джеймс Снелл

4
Будь-який формат файлу, неправильно сформований / пошкоджений, може призвести до виходу з ладу програмного забезпечення. Тож XML тут не є винуватцем ... лише ваша програма. Інакше хороший пост.
Томас Едінг

3
Чи можете ви розширити питання про "охоплює багато крайніх випадків, яких YAML та JSON не роблять."
Тревор Хікі

14

Джефф Етвуд має досить хороший пост у блозі на XML: Податок на кутову скобу про це, якщо ви хочете, щоб джерело говорило про це.

Найпоширеніші сфери використання:

  • Служби, що спілкуються між собою. Наприклад, веб-сайт, що використовує систему управління вмістом, повинен надсилати деякі дані в систему управління відносинами з клієнтами, і це робиться з XML.

  • Конфігураційне сховище. Web.config і app.config є загальними прикладами, але сценарії nAnt також можуть використовувати для них деякі XML.

Я не думаю, що це оптимально, але це одне не робить це погано для мого розуму.


11

Дві причини:

  1. Там є дуже багато поганих програмістів. XML може бути поганим, але він також простий (принаймні на поверхні) і дозволяє дуже легко писати погане програмне забезпечення. Сорта як VB.
  2. Багато людей, які приймають ці рішення, - це не програмісти, а типи бізнесу, які чули лише, що «всі використовують XML», і тому вони вирішують, що хочуть, щоб їхній продукт також використовував XML.

Які безглузді і абсолютно марні моменти. 1) XML далеко не поганий, і він не має абсолютно нічого спільного з якістю програмного забезпечення, яке люди пишуть, вибирають вони це чи ні, я бачив досить хороших програмістів VB, маючи на увазі, що якщо ви використовуєте VB, ви насправді пишете погане програмне забезпечення просто нерозумно, тому що існує повний розрив між тим, як ви пишете програмне забезпечення, і тим, що ви використовуєте для його написання. 2) Ще одне помилкове припущення: вибір XML - це чудово, і більшість людей, які вибирають його для кращого чи гіршого, безумовно, програмісти. XML - це не срібна куля, але це добре для певних речей.
Еял Сольник

2
@EyalSolnik: Деякі люди, коли стикаються з проблемою, думають: «Я знаю, я використовую XML».<Problem:Worsening> <Problem:TimeDescription>Now</Problem:TimeDescription> <Problem:Posessive>they have</Problem:Posessive> <Problem:Quantity>many, many</Problem:Quantity> <Problem:WorseningDescription>more problems</Problem:WorseningDescription> </ProblemWorsening>
Мейсон Уілер

3
Тільки тому, що люди щось зловживають, це не означає, що сама технологія є поганою, ви можете побачити той же синдром у багатьох місцях.
Еял Сольник

8

Зазвичай я чую, як терміни "роздутий" і "повільний" кидаються навколо.

Це не самий компактний синтаксис, але, очевидно, найвиразніший. Людина читана? залежить від того, як ви розробляєте свою мову. Більшість людей не розробляють мову для XML, вони просто серіалізують об'єкти як XML.

... чому так багато людей використовують його?

Це всюдисуще. Ви можете запитувати базу даних XML за допомогою XQuery, трансформувати результати в XSLT як XHTML або Atom, отримати Atom або інший формат XML з інших веб-служб, отримати XML від користувачів за допомогою XForms, перевірити його за допомогою XMLSchema, Relax NG або Schematron, обробити його XProc, збережіть його назад у базі даних за допомогою оновлення XQuery. Усі ці інструменти розуміють XML, тому немає необхідності у відображенні між різними представленнями.

XML не є технологією серіалізації, це набір інформації загального призначення.


... і ми запитуємо себе роками, чому для chrissakes SOAP був побудований на XML.
JensG

6

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

XML по суті не є поганим, але я визнаю, що розробка "хорошого" рішення за допомогою XML не є тривіальною.


5

"Суть XML полягає в наступному: проблема, яку вона вирішує, не є складною, і вона не добре вирішує проблему." - Філ Вадлер, POPL 2003

Моя особиста думка полягає в тому, що поки ви не переймаєтесь валідацією, схемами, XSLT та іншими некрасивими речами, а розмір файлів залишається невеликим (інакше розбір стає повільним), ви можете знайти хороші способи використання XML (приклад призначений для налаштування програми, а не для використання файлів INI).


4

З мого досвіду, люди переважно скаржаться на те, як він звикає, а не на саму технологію.

Роздуті і повільні біти, на які скаржаться люди, зазвичай є бібліотеками / методами, які використовуються для отримання інформації з неї.

Я використовую його для зберігання невеликої кількості структурованої інформації, яку я хочу зберігати на диску (без бази даних або двійкової серіалізації), або для передачі в інший додаток (який, по суті, також описує SOAP).


2

Це добре тому, що:

Його стандартний "Інтерфейс" яким можуть спілкуватися декілька різнорідних систем. І є "людською" читаною (начебто, спробуйте дивитися на 5 Мб XML)

Це погано, тому що:

Його роздутий, більший розмір = більше смуга пропускання = більше $$

Є й інші причини, кожен має різний захват ...


4
@Darknight: Я кидаю виклик людському читанню , кидаючи на вас сутності Xml ... (особистий погляд)
Matthieu M.

1
Я не думаю, що XML по своїй суті роздутий - але його реалізація є. Я вважаю, що XML-RPC є особливо непристойним при непотрібному пориві.
HorusKol

3
@HorusKol: <advanceAcceptanceIndicator>Y</advanceAcceptanceIndicator>Коефіцієнт даних / розмітка настільки низький ... Я називаю це "роздутим". JSon, наприклад, буде тільки половина роздутою: advanceAcceptanceIndicator: "Y". Існує також той факт, що текст між тегами є дійсним, тому, читаючи Xml, вам потрібно вирішити, що робити з цим суглобом \n\t\t\t, і рішення, як правило, просто ігнорувати його, тому що ви ніколи не цікавились цим для початку.
Матьє М.

1
@HorusKol: Було б, але я ніколи не говорив, що це булеве значення, це просто трапляється один знак :) Використання атрибута тут ( value?), Ймовірно, теж було б вище, тому що люди можуть спокусити вставити пробіли між двома теги.
Матьє М.

1
"Його роздутий, більший розмір = більше смуга пропускання = більше $$" Я думаю, стиснення ще не було винайдено там, де ви ще є.
Енді

2

Як і для будь-якої іншої технології: є багато доступних інструментів та бібліотек.

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

Але:

  • Можна вказати Xml (xsd) та доступні інструменти, які перевіряють відповідність даних Xml
  • безліч інструментів (текстові редактори тощо) підтримують Xml
  • багато бібліотек (приблизно в кожній мові програмування) підтримують Xml

Він також має перевагу переваги, більшість разів. Коли ви вже надаєте веб-сервіси в Xml, і хтось запитує про нову послугу ... це, мабуть, буде зроблено в Xml, оскільки це ви знаєте.


5
XML є більш читабельним, ніж двійкові дані або дані з обмеженою комою.
FrustratedWithFormsDesigner

Тільки для наївного користувача. Якщо мені доведеться візуально сканувати пару сотень записів, шукаючи того, у якого відсутні деякі дані, я б швидше шукав порожні стовпчики в блоці записів фіксованої довжини, ніж пробирався через безлад елементів і атрибутів, шукаючи порожній тег.
TMN

1
@FrustratedWithFormsDesigner: це дійсно залежить від наявних даних. Xml вбудовує природу інформації біля самої інформації. Якщо ви подивитеся на функціональні мови програмування, ви побачите такі речі, як (Haskell):, data Person = Person { surname :: String, firstName :: String, age :: Int }якщо я бачу, Person "Doe" "John" 42це теж читабельно, і уникнути великої кількості сурових, але це ближче до розмежування комами.
Матьє М.

1
Гаразд, ваш приклад було легше читати без розмітки, але банальні (я б сказав, що менше 8 або 9 елементів даних) можна зробити приклади для підтримки всіх форм (крім, можливо, бінарних). Файли даних від основного кадру походять як рядки з обмеженою позицією (і більшість з них - це лише числові коди), і їх набагато простіше читати та налагоджувати та керувати після їх перетворення в XML. Як ви сказали, це може залежати ...
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner: Так, це якраз моя думка :) Це залежить, але оскільки для XML існує така багата екосистема, і тому що простіше підтримувати лише один набір інструментів / бібліотек, люди зазвичай використовують XML для всього. Особисто я віддаю перевагу JSon над XML, але ще раз без відступів - це безладно: p
Маттьє М.

-1

XML - це поганий вибір файлів, які повинні підтримувати люди. Немає візуального поділу між розміткою та вмістом, що ускладнює читання. Стомлено писати правильно без редактора спеціального призначення. Будь-яка помилка в XML-документі є фатальною; документ XML не може бути частково оброблений. Якщо XML-файл недійсний, отримане повідомлення про помилку часто не допомагає.

Для будь-якого файлу, який повинен підтримувати людина, я вважаю за краще використовувати будь-який з JSON, YAML або вихідний код якоюсь інтерпретованою мовою (Python, Ruby, Groovy тощо). Ми виявили, що чудовим способом створення конфігурації XML для застарілого коду є використання Groovy MarkupBuilder. Ще одним хорошим вибором є створення мови, що залежить від домену; це досить легко зробити з Ruby, Groovy та багатьма іншими мовами.


8
Я думаю, вам не вистачає точки XML, розмітка - це вміст. Мета XML - описати значення ваших даних. Наприклад, якщо у вас є номер телефону, позначення його як стаціонарного або мобільного номера додає контекст, який можуть використовувати інші. Або додати тег телефону навколо тексту взагалі для цього питання (можливо, цей номер можна дзвонити на мобільний телефон). Щодо інших ваших моментів, я також не згоден. Оформлення XML-документів, як правило, досить просто. Повідомлення про помилки завжди пов’язані з хорошою інформацією, і я будь-який день
прийму

@konrad приклад вашого телефону буде дійсним для HTML.
Флоріан F

"Будь-яка помилка в XML-документі є фатальною; документ XML не може бути частково оброблений." Так, це велика відповідність точці XML.
Енді

@Andy Це досить марно, якщо XML був написаний людиною, а додаток просто говорить "неправильно!". Людському редактору необхідно знати рядок, де виявлена ​​помилка.
Кевін Клайн

Будь-яка кількість інструментів точно вказує вам, у якому рядку та часто на якому символі виявлена ​​помилка. Наприклад, інструменти XML у NotePad ++. .Net точно скаже, де ваш файл .config неправильний. Якщо ви говорите про API, однією з переваг XML є те, що розробник API може також надати XSD, який, крім забезпечення дійсного синтаксису XML, також може вам повідомити, чи є у вас елементи, які не належать, якщо вони повинні бути лише одним із цього елемента і т. д. Рукописний json набагато простіше викрутити.
Енді

-2

Розбір відносно легкий, одночасно читаючи людину.

І деякі приємні аналізатори (наприклад, Xerces {c ++}) легко доступні.


2
Ну, це просто, поки документи невеликі. Якщо вам доведеться розбирати документи занадто великі, щоб розумно вписатись у пам'ять, то все стає моторошним.
TMN

Я б поставив під сумнів частину читабельності людини. Це просто вимагає занадто великих зусиль, щоб прочитати XML над читанням еквівалентного JSON.
cmaster
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.