LINUX.ORG.RU
ФорумTalks

Почему люди хейтят XML?

 , , , ,


1

1

Я постоянно слышу, что XML слишком раздут, неудобен и не читаем для людей. Господа, вы хоть раз пробовали не в vi его править, а в XML-редакторе с подгруженной схемой? Где узлы (из указаний схемы) сами предлагаются и на 90% генерируются при создании, остаётся только параметры вписать (которые будут немедленно валидированны по схеме).

Я уж не говорю, что при использовании XML-конфигов (со схемой) для приложений мы сразу решаем несколько задач:

1. У нас не может быть неправильного конфига (только логически неправильного, но тут уже ничего не сделаешь). В схеме можно указать указать абсолютно всё, вплодь до того, какие стринг-параметры (даже регексповые) должны быть, какие типы данные, сколько их, названия параметров, обязательные и не обязательные паметры (и зависимости их друг от друга) и т.д.
Т.е. мы изначально можем не верифицировть конфиг своим кодом при наличии корректной схемы.
2. Далее не надо писать шаблонные регенараторы конфигурации для систем автомации, можно легко заменить нужный параметр на лету (и проверить, что всё корректно). А если и писать, то гораздо легче.
3. Вместо этого мы видим кучу всяких json, yaml, ini-подобных, тегированных, гибридных и прочих конфигов и форматов документов, которые принимаются приложением сразу с падением в случае ошибки (вместо оставления предыдущего состояния).
4. XML полностью стандартизирован. XEP и ещё несколько дублирующих стандартов.
5. XML БД, XPath.
6. Про работу с большими документами, которые, якобы, занимают кучу памяти. Кто-то просто не осилил курсорную или объектную работу с XML. Например, как в XMMP. Так называемые «бесконечные документы). Мало того, например, в яве, можно очень удобно повесить на поступление данных из файла (или сокета) обработчики в зависимости от поступающих данных на которые они будут реагировать, т.е. фактически срабатывание методов будет привязано к поступающему документу (т.е. документ управляет приложением, никакого заумного парсинга). При этом сохраняются только родители, а все обработанные листы выгружаются из памяти. Работает ооочень быстро, спросите у IBM с многогигабайтными XML-доками. И не надо писать никакой логики верификации - схема автоматически сама всё проверит (и можно поставить обработку эксепшенов)
7. Обязательный UTF8.

Так почему люди до сих пор не используют столь шикарный инструмент и хают его? Просто не осилили?

Перемещено leave из development



Последнее исправление: ktulhu6662 (всего исправлений: 2)

Ответ на: комментарий от stevejobs

все как раз наоборот - закрывающий тэг позволяет парсеру верить, что он ТОЧНО будет

Так и в json, и в yaml, и в ini есть макеры конца элемента/блока. Просто в XML он выглядит именно как открывающий тег. В общем, это имеет значение для человека, а парсеру пофиг абсолютно.

Wizard_ ★★★★★
()
Ответ на: комментарий от Wizard_

ну правильно, в JSON без подсвечивающего редактора нет никаких шансов догадаться, какой же сейчас блок закрывается. А в YAML и редактор не очень-то поможет - ему нечего подсвечивать

stevejobs ★★★★☆
()

Я не являюсь хейтером XML, и его примитивная версия мне даже импонирует. Но проблема в том, что парсить полноценный XML - ад. Это очень сложный формат, по сравнению с тем же JSON.

DTD, character entity references, multi-line text, CDATA, etc.

Но есть случаи, где XML тупо лучше. Тот же SVG или HTML.

Пример:

<svg height="360" width="360" xmlns="http://www.w3.org/2000/svg">
	<rect x="10" y="10" width="100" height="100"/>
	<g>
		<rect x="10" y="10" width="100" height="100"/>
	</g>
</svg>
vs.
{
	"type": "svg",
	"width": 360,
	"height": 360,
	"xmlns": "http://www.w3.org/2000/svg",
	"elements": [{
		"type": "rect",
		"x": 10,
		"y": 10,
		"width": 100,
		"height": 100
	},
	{
		"type": "g",
		"elements": [{
			"type": "rect",
			"x": 10,
			"y": 10,
			"width": 100,
			"height": 100
		}]
	}]
}

RazrFalcon ★★★★★
()
Ответ на: комментарий от stevejobs

Ты, прям, мой единомышленник. XML в массы! А что ты думаешь на тему того, чтобы ВСЕ приложения вообще конфиги не хранили, а был единый демон с XML-БД (с удобным редактором для конкретных конфигов, конечно), куда приложения складывали бы свои конфиги, и брали бы от туда (с авторизацией)? Это позволило бы полностью оркестрацию и автоконфигурацию упростить. Для современных систем, где всё должно само разворачиваться в облаках, а не писаться куча шаблонов для кривых конфигов кривых приложений - это было бы просто идеально!

ktulhu6662
() автор топика
Ответ на: комментарий от system-root

у некоторых, такое биполярное мышление пациентов откровенно вызывает ассоциации со школьниками. по мне, так заслуженно вызывает.

Абсолютно согласен: для вебни JSON куда лучше по целому ряду признаков.

ktulhu6662
() автор топика
Ответ на: комментарий от ktulhu6662

у нас подобная штука есть прямо сейчас - именно для работы с облаками на тысячи серверов - но она закрытая проприетарная :( Локальный бэкенд - XML, если же нужно единый реестр на целый кластер - то реляционная БД либо in-memory data grid.

очень хотелось бы иметь такую штуку в опенсорце. Может, уже есть?

еще нужно как-то внедрить культуру использования такой штуки. Если мы будем единственные, кто ее использует - это немножко не то)

олсо, сейчас есть например вот такое: https://github.com/Netflix/archaius (оно не про XML, но про кластерный реестр. В частности, может использовать Зукипер как бэкенд для хранения данных. Наверное, можно навернуть и XML. Но самое главное - можно посмотреть, с какими задачами и проблемами там столкнулись)

stevejobs ★★★★☆
()

Господа, как вам не стыдно кормить такого жирного тролля?

crutch_master ★★★★★
()
Ответ на: комментарий от ktulhu6662

Вероятно, чувак ты никогда не слышал про проблемы расширяемости бинарных форматов, endianess, версий форматов и интеграций между ПО.

Вероятно, чувак слышал и про эти проблемы, и про то как их решали. И про стандарты, где все это уже давно запилено. А тебя - с разморозкой.

segfault ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.